节点承诺链中断

时间:2016-06-23 12:47:33

标签: node.js promise

我试图突破承诺链,但即使在reject('something')所有then(methods)被执行后,最后还是catch()。不应该直接执行catch跳过then(methods)

method1()
.then(method2())
.then(method3())
.then(method4())
.then(method5())
.catch(errohandler())


method1(){
return new Promise(function (resolve, reject) {
    if (some condition) {
      reject(new Error("error"));
    } else {
      resolve("correct entity. all parameters present");
    }
  });
}

当我的条件为真时,控件转到if块,并且稍后会在catch块中显示错误消息。然而,所有的(方法)都被执行了。

1 个答案:

答案 0 :(得分:2)

您不会将这些方法作为回调传递,但实际上是在调用它们并将结果传递给promise链。将其更改为此应该具有预期的行为。

method1()
.then(method2)
.then(method3)
.then(method4)
.then(method5)
.catch(errohandler)

在评论中修改后的方案后更新:

如果您想使用周围函数的某些参数调用method2,那么您可以这样做:

function myFunc(a, b){
    method1()
        .then(function() { method2(a, b); })
        // ... other chain elements
        .catch(errohandler()) 
}