我似乎无法弄清楚这一点。我有一个POST路由,该路由使用Stripe的Node包通过Stripe创建事务。
它可以正常工作,直到出现错误为止,例如卡片资金不足。发生错误时,它将按预期方式调用catch()
块。在catch块中,我有return next(err)
。我肯定会使用return
,因为在承诺之后还有其他代码仅应在stripe.charges.create
成功后才能运行。
但是,即使使用return next(err)
,它似乎仍在继续运行,如我所使用的console.log
所示。另外,该路由返回200状态,带有“已执行的路由”文本。在此路由之后,我还有一个全局错误捕获器。请随时查看下面所附的图片以获取更多详细信息。
对于为什么会发生这种情况,有人有任何想法吗?在没有问题之前,我已经完成了很多次此结构。不太清楚发生了什么。
感谢您的输入!
答案 0 :(得分:1)
这是因为catch
与外部代码不在同一范围内。
您已经在这里使用async
/ await
,所以只需使用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);
}