我如何在angularjs中使用$ q.all(promises)

问题描述 投票:0回答:1

通常,我会这样做

$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次调用返回的响应数据吗?谢谢。

javascript angularjs angular-promise
1个回答
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>

有关更多信息,请参阅

© www.soinside.com 2019 - 2024. All rights reserved.