【发布时间】:2017-04-01 20:53:39
【问题描述】:
我正在尝试使用 $q.defer、$q.all 和 promises 来等待 http 请求列表
我使用此代码调用 $q.all
$q.all(promises).then(function(data) {
console.log('All promises have resolved', data);
var retVal = Utils.DoStep2();
console.log(retVal);
});
尽管我检查过这个函数,但从未调用过此函数,并且为所有值调用了 $http.get。
var deferred = $q.defer();
$http.get(requestUrl).
then(function (data) {
var p = {
data: data,
name: name
};
pData.push(p);
deferred.resolve(p);
return p;
})
.catch(function (status) {
deferred.reject(status);
});
promisesList.push(deferred.promise);
我在 DoStep2 上打印 pData 的长度以及使用 console.log 的 pData 我得到的是 0 的长度,看起来像 0 个对象,但是当我打开它时,看起来所有对象都在每个特定调用的 $http.get 调用中初始化,这让我确保 $http.get 响应已收到,这是一个有效的回复。
另外 $all 根本没有被调用有什么问题?
感谢您的帮助
【问题讨论】:
-
一种可能性是您没有得到每个请求的成功响应。如果您有 400 响应,则视为对
$http.get的拒绝。另一个是.then()中的直接运行时错误(我看不到pData声明,所以.push可能会失败。 -
请提供minimal reproducible example。也不需要使用
$q.defer(),因为$http本身会返回一个承诺 -
其他问题:你推
promisesList,但在promises上调用.all。就个人而言,我尽量减少使用$q.defer()——$http.get的结果无论如何都是一个承诺,所以你可以直接推送它。 -
什么是
pdata?promises和promisesList一样吗?
标签: javascript angularjs http