gpt4 book ai didi

javascript - 在 AngularJS 1.5.0 中获取 $http.get() 中的空返回结果

转载 作者:行者123 更新时间:2023-11-30 09:51:41 25 4
gpt4 key购买 nike

我在我的 AngularJS 应用程序中创建了一个工厂,用于在对列表的一个或多个元素执行删除后从服务器引入刷新数据。

var myApp = angular.module('app');
myApp.factory('mvListRefresher', function($http) {
return {
refreshCourses : function() {
var list = new Array();
$http.get('/api/courses').then(function(response) {
console.log('got refreshed lists');
console.log(response.data);
list = response.data;
}, function(error) {
console.log('error in retreiving fresh lists');
console.log(error);
});

console.log('Displaying list of courses');
console.log(list);
if(list.length != 0) {
return list;
}
}
}
});

我通过调用在我的一个 Controller 中调用这个工厂

$scope.courses = mvListRefresher.refreshCourses();

但是我得到的是一个空列表,即我根本没有得到任何返回值。在我的工厂函数中,我观察到这条线

console.log(list);

总是打印出一个空数组,但是行

console.log(response.data);

位于成功回调中,可以正确打印出完整的对象列表。我不知道这是怎么回事。我对 AngularJS 的 promise 比较陌生,它是异步方法和架构。请帮帮我。如果您需要更多信息,我会提供。我已经使用 MEAN 完成了整个应用程序。提前致谢!

最佳答案

$http 请求本质上是异步的,因此在您返回 list 时,请求尚未完成。您可以在此回复中阅读有关 JavaScript 中异步性的一般概念的更多信息:https://stackoverflow.com/a/14220323/704894

您应该做的是返回列表的 Promise:

myApp.factory('mvListRefresher', function($http) {
return {
refreshCourses: function() {
return $http.get('/api/courses').then(function(response) {
return response.data;
});
}
};
});

$http 方法返回结果 promise 。然后你可以通过以下方式使用这个函数:

mvListRefresher.refreshCourses().then(function (list) {
$scope.courses = list;
});

您可以在 $http documentation 中阅读更多相关信息.

关于javascript - 在 AngularJS 1.5.0 中获取 $http.get() 中的空返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36148743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com