【发布时间】:2018-07-13 10:20:53
【问题描述】:
最近我将代码从 Express 更改为 Restify。老实说,我不确定以前是否曾经发生过,但我想确实发生过。
基本上在我的中间件中,我调用一个承诺方法,当它解析时,我调用next 并在下一个中间件中执行其他操作。当它被拒绝时,我还想拨打next,在某些情况下没有错误。否则它必须调用错误中间件,将err 传递给next。
somePromise()
.then(()=>{
next();
})
.catch((err)=>{
if(err.someatt) next();
else next(err)
});
它适用于somePromise 的预期结果。问题是next 被then-catch 链绑定。当下一个中间件出现错误时,它会调用catch 方法并再次调用next!
我发现 next 有一个属性 called ,当我在再次调用 next 之前将其设置为 false 时,我摆脱了错误。但当然它是一种反模式。我在不同的中间件中也遇到了同样的问题,我也使用了 Promise(按预期调用 next,然后在 catch 语句中再次调用它)。
还有其他人遇到过这样的问题吗?
【问题讨论】:
-
您可以尝试/捕获您对
next()的第一次调用,以便异常不会传播到您的.catch()处理程序。或者,您可以使用.then()的两个参数,因此第一个.then()回调中的拒绝/异常不会转到该 catch 处理程序。 -
是的!我已经做到了。问题是我需要调用错误中间件。我必须将它分成几部分,以便我可以从 try/catch 和中间件堆栈中调用它
标签: javascript node.js express promise restify