如何通过node.js中的本地promise来全局处理exception?

我知道如何处理承诺中的具体错误,但我有时看起来像这样的代码块:

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

有时,当JSON.parse throw s时,我得到无效的JSON,导致无声的失败。 一般来说,我必须记得在我的代码中添加一个.catch处理程序给每个单独的承诺,当我不知道我在哪里忘记了。

我如何在代码中find这些被抑制的错误?

在现代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,而且不太可能。 你可以使用一个承诺库来扩展本地承诺的API,比如蓝鸟 ,它将触发与现代版本中相同的事件。


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