如何在node.js中使用原生Promise处理全局异常?

9
我知道如何处理Promise中的特定错误,但有时我的代码看起来像这样:
somePromise.then(function(response){
    otherAPI(JSON.parse(response));
});

有时候,我会得到无效的JSON,导致在JSON.parse throw时默默失败。通常情况下,我必须记住为代码中的每个Promise添加一个.catch处理程序,当我忘记添加时,我就没有办法找出哪里出了问题。
如何在我的代码中找到这些被压制的错误?
1个回答

20

编辑

我们终于在Node.js 15中修复了这个问题,虽然用了5年时间,但是原生Promise拒绝现在的行为就像未捕获的异常-所以只需添加一个process.on('uncaughtException'处理程序即可。

在现代Node.js中

从io.js 1.4和Node 4.0.0开始,您可以使用process"unhandledRejection"事件:

process.on("unhandledRejection", function(reason, p){
    console.log("Unhandled", reason, p); // log all your errors, "unsuppressing" them.
    throw reason; // optional, in case you want to treat these as errors
}); 

这将结束未处理拒绝的问题,并且在您的代码中跟踪它们变得更加容易。

在较旧的NodeJS版本中

这些事件尚未被回溯到较旧的NodeJS版本中,也不太可能回溯。您可以使用扩展本机Promise API的Promise库,例如bluebird,它将触发与现代版本中相同的事件。


值得一提的是,还有几个用户态Promise库提供未处理拒绝检测功能以及许多其他功能,例如(还有警告)和


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接