一尘不染

产生一个依赖于递归承诺的承诺

angularjs

我有一个整数id的数组,例如

var a=[1,2,3,4,5]

并且我需要为每个ID执行异步远程调用。每个调用都是一个使用$ resource执行的WebAPI请求,并显示为Promise。

我需要创建一个接受这些ID数组的函数,然后初始化递归承诺链。该链应导致对每个ID依次进行webapi调用。这些调用不应并行,而应链接在一起。

有问题的函数返回自己一个“主要”的承诺,该承诺应根据异步Web调用的结果来解决或拒绝。也就是说,如果由于与服务器断开连接而在递归中拒绝了某些承诺,则主要承诺也将失败。在正常情况下,“主要”承诺必须在所有请求完成时解决。

如何在angularjs中完成此操作?


阅读 226

收藏
2020-07-04

共1个答案

一尘不染

您可以使用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([]));
2020-07-04