我有3个WinJS Promise,我想按顺序调用,直到完成没有错误。
伪代码:
var promises = [promise1,promise2,promise3];
promises.each (promise)
promise.then (result) return result
当然,我不能在数组上使用.each,因为这会并行执行promises。
所以首先迭代应该是顺序的,如果promise返回错误,则应该尝试下一个promise,否则它应该返回成功promise的值。 如果没有promise返回成功,那么整个循环应指示失败。
答案 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
非常相似,只是它顺序等待)