陷阱when.js未经处理的拒绝

时间:2015-04-17 02:20:52

标签: javascript promise when-js

我想陷阱when.js未处理的拒绝,以便我可以记录它们。为了实现这一点,我已经覆盖了console.warn(),但是这可以记录除了我不感兴趣的when.js之外的东西。

参考:https://github.com/cujojs/when/blob/master/docs/api.md#debugging-promises

我使用的是pretty.js https://github.com/AriaMinaei/pretty-monitor

的漂亮监视器

1 个答案:

答案 0 :(得分:4)

如果您在服务器端,则可以使用promise rejection挂钩。这些将适用于服务器端的大多数promise实现(io.js,bluebird,when等):

 process.on("unhandledRejection", function(promise, reason){
    // deal with the rejection here.
 });

如果您处于浏览器环境中,事情就会变得不那么标准化了。但是,当仍然提供类似的钩子时:

window.addEventListener('unhandledRejection', function(event) {
    event.preventDefault(); // This stops the initial log.
    // handle event
    event.detail.reason; // rejection reason
    event.detail.key; // rejection promise key
}, false);

还有本地拒绝挂钩,如果您只想处理对promise库的单个实例的拒绝,这些很好 - 这通常对自己构建库时很有用:

var Promise = require('when').Promise;
Promise.onPotentiallyUnhandledRejection = function(rejection) {
    // handle single instance error here
};