如何在$q下传递多个$http承诺
How to pass multiple $http promise under $q
我有一堆url,我想让GET调用一个接一个,然后加入每个url的返回数据。
我使用以下代码组合多个承诺,然后将其传递到$q.all.
var urls = _.map(urlArray, function(pUrl) {
var promise_obj = $http.get(pUrl);
return promise_obj;
});
$q.all(urls)
.then(function(responses) {
ctrl.points = _.reduce(responses, function(data, response) {
if (elem == undefined) {
return data.concat(response.data);
} else {
return data.concat(response.data[elem]);
}
}, []);
}
});
但是这不起作用,因为url变量传递给$q。一切都是空的。我假设原因是$http。get调用是异步的,所以我调用$q的时候。
所有url的值都为空。问题是我可以有尽可能多的url,所以我不想链的响应。知道怎么让它工作吗?
我已经稍微修改了您的代码,这里有一个jsBin(尽管使用$timeout
而不是$http
)来展示所做的更改。
但是看到$timeout(func)
和$http.get
都返回一个承诺(我已经做了你在过去用$http.get
的数组多次做的事情),我会研究为什么urls/urlArray
最终被传递到$q.all()
时是undefined
。
我相信错误在你到达$q.all之前的某个地方。可能是一个被拒绝的承诺。
Docs for $q.all
:
返回一个承诺,它将被一个数组/哈希值解析,每个值对应于承诺数组/哈希中相同索引/键处的承诺。如果任何一个承诺被拒绝,这个承诺将以相同的拒绝值被拒绝。
尝试在承诺链中添加.catch
。
相关文章:
- Angular中的过滤和$http承诺
- $http中的Angular 1数据绑定承诺不起作用
- 如何同时使用节点承诺和 http
- 承诺中的成功回调不会发生$http
- angular服务中的$http承诺
- 同步解决HTTP延迟承诺
- AngularJS$http承诺异常不会冒泡
- 从工厂返回控制器$http承诺时未定义
- 角度$http承诺无法解决
- Angular JS$http承诺表现得像真正的$q承诺吗?
- Angularjs模拟一个返回$http承诺的函数
- AngularJS -拒绝了使用$routeProvider:resolve的$http承诺
- Angular的$http承诺和回调函数没有触发
- Angular HTTP承诺返回空
- Angular js的Http承诺在typescript中
- 如何在$q下传递多个$http承诺
- 为什么这个对象在angular http承诺对象中是$window ?
- $http承诺不更新作用域(ng-hide)
- 拒绝Angular的$http承诺
- Angularjs $http承诺时没有返回对象