我有许多承诺(使用Q),我想按顺序呼叫,这是我的代码:
// All the promises are called sequentially
var result = promises.reduce(function(promise, item) {
return promise.then(function () {
var obj = toPush.shift();
});
}, Q());
// Check the result
result.then(function() {
// Do something if all of the promises full
}).catch(function() {
// Do something if ONE of the promise is rejected and stop the others
}).finally(function() {
App.network.stopLoader();
});
promises是一个承诺数组(回调函数)
它很有效,所有的承诺都按顺序完成,但是当一个承诺被拒绝时,它仍然会进入then函数而不是catch。 为什么?
我用过这个:Break a dynamic sequence of promises with Q
感谢您的帮助:)
答案 0 :(得分:0)
永远不会调用catch的原因是因为你不会在代码的这一部分返回任何内容:
return promise.then(function () {
var obj = toPush.shift();
});
相反,你应该尝试:
return promise.then(function () {
return toPush.shift();
});
如果你这样做:
result.then(console.log)
你应该总是看到未定义,但它不会被抓住。
希望这有帮助!
答案 1 :(得分:0)
看起来你只想要Q.all:
CalendarIframe
根据documentation,一旦数组中的任何承诺被拒绝,所有人返回的承诺将被拒绝。 (与在解决返回的promise之前等待解析所有promise的allSettled相反)。