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

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

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; } } } }); 

我打电话给我的一个控制器调用这个工厂

 $scope.courses = mvListRefresher.refreshCourses(); 

但是我得到一个空的列表,即我没有得到任何返回值。 在我的工厂function,我观察到的线

 console.log(list); 

总是打印出一个空的数组,然而行

 console.log(response.data); 

这是成功callback里面正确打印对象的完整列表。 我不知道这是怎么回事 我对AngularJS的承诺相对陌生,它是asynchronous的方法和架构。 请帮助我。 如果你需要更多的信息,我会提供。 我已经使用MEAN完成了整个应用程序。 提前致谢!

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

你应该做的是返回一个列表的承诺:

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

$http方法返回结果的承诺。 那么你可以用下面的方法使用这个函数:

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

您应该在$ http文档中阅读更多关于它的信息 。