产生一个取决于递归承诺的承诺

Ask*_*mov 4 javascript asynchronous promise angularjs q

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

var a=[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

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

我需要创建一个函数来获取这些ID的数组,然后初始化递归的promises链.该链应该逐个导致对每个ID进行相应的webapi调用.这些调用不应该是并行的,而应该是链接的.

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

我怎样才能在angularjs中实现这一目标?

Ber*_*rgi 5

您使用reduce数组将Promises链接在一起.没有必要使这个递归.

// 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([]));
Run Code Online (Sandbox Code Playgroud)