我有一个整数id的数组,例如
var a=[1,2,3,4,5]
并且我需要为每个ID执行异步远程调用。每个调用都是一个使用$ resource执行的WebAPI请求,并显示为Promise。
我需要创建一个接受这些ID数组的函数,然后初始化递归承诺链。该链应导致对每个ID依次进行webapi调用。这些调用不应并行,而应链接在一起。
有问题的函数返回自己一个“主要”的承诺,该承诺应根据异步Web调用的结果来解决或拒绝。也就是说,如果由于与服务器断开连接而在递归中拒绝了某些承诺,则主要承诺也将失败。在正常情况下,“主要”承诺必须在所有请求完成时解决。
如何在angularjs中完成此操作?
您可以使用reduce数组将承诺链接在一起。无需进行此递归。
reduce
// for angularjs: var Q = $q.when; var p = a.reduce(function(prev, el) { return prev.then(function(arr) { return makeRequest(el).then(function(res) { return arr.concat([res]); }); }); }, Q([]));