遍历WinJS承诺的阵列,并打破如果成功完成(Iterate over array of WinJS

2019-10-21 10:21发布

我有,我想直到一个完成,没有错误依次调用3个WinJS承诺。

伪代码:

var promises = [promise1,promise2,promise3];
promises.each (promise)
  promise.then (result) return result

当然,我不能在阵列上使用。每次因为这将并行执行的承诺。

所以第一迭代应该是连续的,如果承诺一个错误的下一个诺言,应尝试返回,否则就应该返回成功的承诺的价值。 如果没有承诺成功返回,那么整个循环应指示失败。

Answer 1:

基本上你想

return promise1.catch(function(err) {
    return promise2.catch(function(err) {
        return promise3;
    });
})

或(扁平)

makePromise1().catch(makePromise2).catch(makePromise3);

你可以很容易地从动态的待试图通过使用函数的阵列创建此链reduce

return promiseMakers.reduce(function(p, makeNext) {
    return p.then(null, makeNext);
}, WinJS.Promise.wrapError());

或者,如果你真的有承诺的数组(即已经启动任务并行运行):

return promises.reduce(function(p, next) {
    return p.then(null, function(err) {
        return next;
    });
}, WinJS.Promise.wrapError());

(这是非常类似于Promise.any ,不同之处在于它等待顺序地)



文章来源: Iterate over array of WinJS Promises and break if one completed successful