AngularJS承诺和$ http.get
问题描述:
我试着使用$ q.defer,$ q.all和承诺,以等待HTTP的请求列表
我使用此代码来调用$ Q。全部
$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的长度,也
林印刷使用的pData的console.log 和我所得到的是0长度,看上去就像0对象,但是当我打开它,它看起来像所有的对象在每个特定调用的$ http.get调用中初始化,这使我确信接收到$ http.get响应,并且这是一个有效的响应。
此外,$全部都不会被调用什么可能是错误的?
感谢您的帮助
答
OK设法解决它 我使用的服务功能的getService()和该函数返回的承诺,然后在每个呼叫我加入的getService()承诺返回promisesList这个名单我等待使用$全部,它的工作 非常感谢您的帮助。
一种可能性是您没有针对每个请求获得成功响应。如果你有400个响应,那么这个计数就是对'$ http.get'的拒绝。另一个是'.then()'中的直接运行时错误(我看不到'pData'声明,所以'.push'可能会失败。 –
请提供[mcve]。也不应该使用'$ q.defer()'因为'http http'本身返回一个承诺 – charlietfl
其他问题:你推送'promisesList',但是在'promises'上调用'.all'。我个人最小化使用'$ q.defer()' - $ http.get'的结果是一个承诺,所以你可以直接推送它。 –