我有,我想直到一个完成,没有错误依次调用3个WinJS承诺。
伪代码:
var promises = [promise1,promise2,promise3];
promises.each (promise)
promise.then (result) return result
当然,我不能在阵列上使用。每次因为这将并行执行的承诺。
所以第一迭代应该是连续的,如果承诺一个错误的下一个诺言,应尝试返回,否则就应该返回成功的承诺的价值。 如果没有承诺成功返回,那么整个循环应指示失败。
基本上你想
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
,不同之处在于它等待顺序地)