Javascript 在AngularJS 1.5.0中获取$http.get()中的空返回结果
我在AngularJS应用程序中创建了一个工厂,用于在对列表中的一个或多个元素执行删除操作后从服务器引入刷新的数据Javascript 在AngularJS 1.5.0中获取$http.get()中的空返回结果,javascript,angularjs,node.js,mean-stack,Javascript,Angularjs,Node.js,Mean Stack,我在AngularJS应用程序中创建了一个工厂,用于在对列表中的一个或多个元素执行删除操作后从服务器引入刷新的数据 var myApp = angular.module('app'); myApp.factory('mvListRefresher', function($http) { return { refreshCourses : function() { var list = new Array(); $http.g
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();
但我得到的是一个空列表,也就是说,我根本没有得到任何返回值。在我的工厂功能中,我观察到
console.log(list);
总是打印出一个空数组,但是
console.log(response.data);
它位于成功回调中,正确打印出对象的完整列表。我不知道这是怎么发生的。我对AngularJS的承诺以及它的异步方法和体系结构比较陌生。请帮帮我。如果你需要更多的信息,我会提供的。我已经用MEAN完成了整个应用程序。提前谢谢
$http
请求本质上是异步的,因此在返回列表时,请求尚未完成。在此响应中,您可以阅读有关JavaScript中异步性的一般概念的更多信息:
您应该做的是返回一个承诺列表:
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
请求本质上是异步的,因此在返回列表时,请求尚未完成。在此响应中,您可以阅读有关JavaScript中异步性的一般概念的更多信息:
您应该做的是返回一个承诺列表:
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;
});
你可以在网站上阅读更多关于它的信息