Javascript Express next()中间件未在.catch()块中启动下一个中间件

Javascript Express next()中间件未在.catch()块中启动下一个中间件,javascript,node.js,express,promise,Javascript,Node.js,Express,Promise,我似乎无法理解这一点。我有一个POST路由,它使用Stripe的节点包通过Stripe创建事务 它可以正常工作,直到出现错误,例如资金不足的卡。当错误发生时,它会调用catch()块。在catch块中,我有返回next(err)。我一定要使用return,因为承诺之后还有其他代码,只有在stripe.charges.create成功后才能运行 但是,即使使用返回下一步(err),它似乎仍在继续运行,如我准备的控制台.log所示。此外,该路由返回一个带有“已执行路由”文本的200状态。请随时查看以

我似乎无法理解这一点。我有一个POST路由,它使用Stripe的节点包通过Stripe创建事务

它可以正常工作,直到出现错误,例如资金不足的卡。当错误发生时,它会调用
catch()
块。在catch块中,我有
返回next(err)
。我一定要使用
return
,因为承诺之后还有其他代码,只有在
stripe.charges.create成功后才能运行

但是,即使使用
返回下一步(err)
,它似乎仍在继续运行,如我准备的
控制台.log所示。此外,该路由返回一个带有“已执行路由”文本的200状态。请随时查看以下图片以了解更多详细信息

有人知道为什么会发生这种情况吗?我以前做过很多次这种结构,没有任何问题;不太清楚发生了什么事

谢谢你的意见


这是因为
catch
与外部代码不在同一范围内

您已经在这里使用了
async
/
wait
,所以只需使用
try…catch
而不是回调

try {
  const charge = await stripe.charges.create({
    amount: 100,
    currency: 'usd'
    source: req.body.cardSource
  });
  console.log('Running');
  res.send('Executed route');
} catch (e) {
  return next(e);
}

谢谢你!但是,promise catch是否应该转到下一个提供了错误和返回语句的中间件?还是我错了?@Blake your promise catch确实这样做了,但它不会停止其余代码的执行-这不是您在这里试图避免的吗?FWIW在本例中,使用
return
与捕获无关。感谢您的回复。我接受你的回答。我还引用了这篇文章,它是helper。由于捕获已过将来的“不返回点”,请将代码作为文本而不是屏幕截图发布。无法搜索,无法将粘贴复制到答案中,在小屏幕上更难阅读,带宽使用率更高,等等。。。