通常,我会这样做
$http({
method:'GET',
url: 'exmapleURL',
params: {someParams}
}).then(function(response) {
console.log(response); // response contains data I need
});
现在我有多个这样的调用要运行,我想等所有这些调用完成后再对它们进行响应,并且$ q.all()似乎是一个不错的起点。
根据AngularJS $q Service API Reference - $q.all文档,
全部(承诺)
将多个promise合并为一个promise,当所有输入promise都被解析时,将被解析。Returns:返回将用值的数组/哈希值解析的单个promise,每个值对应于promise数组/哈希中相同索引/键处的promise。如果任何一个承诺都被拒绝解决,则此结果承诺将以相同的拒绝值被拒绝。
这是否意味着,如果我传入一个请求数组(例如$ q.all(calls).then(response)),则返回的promise将在调用传递时以same的顺序出现在数组中在?我可以执行response[0]
之类的操作来检索第0次调用返回的响应数据吗?谢谢。
这是否意味着如果我传入一个请求数组(例如$ q.all(calls).then(response)),返回的promise的数组顺序与传入的调用顺序相同?是否可以执行诸如response [0]之类的操作来检索第0次调用返回的响应数据?
是,以相同顺序返回数组中的结果:
angular.module("app",[])
.run(function($q) {
var promise99 = $q.when(99);
var promise22 = $q.when(22);
$q.all([promise22,promise99]).then(function([result22,result99]) {
console.log(result22);
console.log(result99);
});
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app"></body>
$q.all
也接受哈希]angular.module("app",[])
.run(function($q) {
var promise99 = $q.when(99);
var promise22 = $q.when(22);
var promiseHash = {
r99: promise99,
r22: promise22
};
$q.all(promiseHash).then(function(resultHash) {
console.log(resultHash.r22);
console.log(resultHash.r99);
});
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app"></body>
有关更多信息,请参阅