我知道如何处理Promise中的特定错误,但有时我会看到一些类似以下的代码:
somePromise.then(function(response){ otherAPI(JSON.parse(response)); });
有时,我收到无效的JSON,这会在JSON.parse throws 时导致无提示失败。总的来说,我必须记住.catch在代码中的每个promise中都添加一个处理程序,而当我不这样做时,我将无法找出我忘记了什么的地方。
JSON.parse
throw
.catch
如何在代码中找到这些被抑制的错误?
从io.js 1.4和Node 4.0.0开始,您可以使用以下process "unhandledRejection"事件:
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版本,并且不太可能。您可以使用扩展了原生Promise API(例如bluebird)的Promise库,该API 会触发与现代版本中相同的事件。
还值得一提的是,有多个userland promise库提供未处理的拒绝检测功能,还有更多内容,例如bluebird(也有警告)和when。