如何通过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 (也有警告)以及何时 。