我试图突破承诺链,但即使在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块中显示错误消息。然而,所有的(方法)都被执行了。
答案 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())
}