【发布时间】:2017-11-08 21:21:34
【问题描述】:
我有一个工厂正在发出“n”个 $http 请求,为了实现这一点,我正在使用 $q.all(),所以让我向您展示我的工厂代码。
app.factory('loadBooks',['$http','$q',function($http,$q){
var promises = [];
return {
getBooks : function(category,no){
for(var i =1; i<=no; i++){
var deferred = $q.defer();
console.log(i + 'request');
$http.get(`https://anapioficeandfire.com/api/${category}?page=${i}&pageSize=10`)
.then(function(response){
deferred.resolve(response);
console.log(response);
})
.catch(function(response){
deferred.reject(response);
})
promises.push(deferred);
}
return $q.all(promises);
}
}
}])
这是我调用工厂函数的控制器
app.controller('bookController',['$scope','loadBooks','$routeParams',function($scope,loadBooks,$routeParams){
$scope.count = $routeParams.no;
loadBooks.getBooks('books',2).then(function(data){
$scope.books = data;
})
.catch(function(response){
});
}]);
现在的问题是我正在从 getBooks 方法发出 2 个请求,并且 api 正在向我发送这两个请求的数据,但由于某种原因,第一个请求在 promise 数组中没有推送任何数据,但第二个请求确实如此。我不知道我做错了什么。该 api 工作正常,因为我可以看到我的网络选项卡中的数据,但是来自第一个请求的数据没有被推送到 promise 数组中! 如果您能告诉我问题出在哪里,我将不胜感激。顺便说一句,我是 $q 的新手。
【问题讨论】:
-
除了答案,原来应该是
promises.push(deferred.promise)。promises.push(deferred)根本不应该工作。
标签: javascript angularjs