迭代WinJS Promises数组,如果一个成功完成则中断

时间:2014-12-11 13:34:07

标签: asynchronous promise winjs

我有3个WinJS Promise,我想按顺序调用,直到完成没有错误。

伪代码:

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

当然,我不能在数组上使用.each,因为这会并行执行promises。

所以首先迭代应该是顺序的,如果promise返回错误,则应该尝试下一个promise,否则它应该返回成功promise的值。 如果没有promise返回成功,那么整个循环应指示失败。

1 个答案:

答案 0 :(得分:2)

基本上你想要

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());

或者如果你真的有一组promises(已经开始并行运行的任务):

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

(与Promise.any非常相似,只是它顺序等待)