动态序列的承诺(Q)永远不会去捕捉
Dynamic sequence of promise (Q) never go to catch
我有一些承诺(使用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是一个promise(回调函数)数组
它工作得很好,所有的承诺都是顺序完成的,但是当一个承诺被拒绝时,它仍然进入then函数而不是catch。为什么?
我曾经用过:用Q
打破一个动态承诺序列谢谢你的帮助
不调用catch的原因是在这部分代码中没有返回任何内容:
return promise.then(function () {
var obj = toPush.shift();
});
你应该试试:
return promise.then(function () {
return toPush.shift();
});
如果你这样做:
result.then(console.log)
你应该总是看到undefined,它不会被捕获。
希望这对你有帮助!
看起来你只是想要Q.all:
Q.all(promises).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();
});
根据文档,一旦数组中的任何promise被拒绝,all返回的promise将被拒绝。(与allsettle相反,后者在解析返回的承诺之前等待所有承诺都解决)。
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- 成功回调永远不会被JSONP请求调用
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- UserInformation.getFirstNameAsync承诺永远不会实现
- AngularJS:app.run() 中的承诺永远陷入循环
- 承诺永远不会实现
- mpromise/僧侣承诺永远不会解决
- 单元测试angularjs$q.all-承诺永远不会完成
- JavaScript永远悬而未决的承诺是坏的吗?
- 动态序列的承诺(Q)永远不会去捕捉