一尘不染

如何使用node.js中的本机承诺全局处理异常?

node.js

我知道如何处理Promise中的特定错误,但有时我会看到一些类似以下的代码:

somePromise.then(function(response){
    otherAPI(JSON.parse(response));
});

有时,我收到无效的JSON,这会在JSON.parse throws
时导致无提示失败。总的来说,我必须记住.catch在代码中的每个promise中都添加一个处理程序,而当我不这样做时,我将无法找出我忘记了什么的地方。

如何在代码中找到这些被抑制的错误?


阅读 266

收藏
2020-07-07

共1个答案

一尘不染

在现代NodeJS中

从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(例如bluebird)的Promise库,该API
会触发与现代版本中相同的事件。


还值得一提的是,有多个userland
promise库提供未处理的拒绝检测功能,还有更多内容,例如bluebird(也有警告)和when

2020-07-07