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

时间:2015-02-25 01:38:11

标签: node.js promise es6-promise

我知道如何handle specific errors in promises但我有时会看到如下代码:

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

有时,我会在JSON.parse throw时获得无效的JSON,导致无声失败。一般来说,我必须记住在我的代码中为每个承诺添加一个.catch处理程序,当我不知道时,我无法找到忘记密码的地方。

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

1 个答案:

答案 0 :(得分:16)

在Modern 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的promise库,例如bluebird,它将触发与现代版本相同的事件。


还值得一提的是,有几个用户态承诺库提供了未处理的拒绝检测设施以及更多,例如(也有警告)和