【问题标题】:Dynamic sequence of promise (Q) never go to catchPromise (Q) 的动态序列永远不会去捕获
【发布时间】:2015-05-29 04:42:45
【问题描述】:

我有许多要按顺序调用的承诺(使用 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。 为什么?

我用过这个:Break a dynamic sequence of promises with Q

感谢您的帮助:)

【问题讨论】:

  • 什么是promises,什么是toPush?你为什么要改变它,你在用obj做什么?看起来你的顺序代码根本不是异步的。
  • promises 是一个选项卡,其中包含一个返回承诺的函数数组,toPush 是一个选项卡,允许我构造选项卡承诺,如果承诺已解决,则 toPush.shift,否则我需要停止所有其他承诺并保存 toPush。
  • promises 数组中的那些函数永远不会真正被调用 - 你不要使用 item!我想知道为什么你认为他们执行得很好。
  • 我改了,还是不行。
  • 怎么改的?请edit你的问题用新代码修改它

标签: javascript promise q


【解决方案1】:

从不调用 catch 的原因是因为您在这部分代码中没有返回任何内容:

return promise.then(function () {
    var obj = toPush.shift();
});

您应该尝试:

return promise.then(function () {
    return toPush.shift();
});

如果你这样做:

result.then(console.log)

您应该始终看到不会被捕获的 undefined

希望这会有所帮助!

【讨论】:

  • 感谢您的回答,但它不起作用。但我可能应该返回一些东西,你是对的。
【解决方案2】:

看起来你只想要 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();
});

根据documentation,一旦数组中的任何一个promise被拒绝,所有返回的promise都会被拒绝。 (与 allSettled 不同,它在解决返回的 Promise 之前等待所有 Promise 解决)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2018-09-07
    相关资源
    最近更新 更多