抓住所有未处理的javascript承诺拒绝

Pet*_*ols 45 javascript es6-promise

我想抓住在javascript Promise中发生的所有未处理的异常/拒绝.是否有一种很好的方法来捕获它们而不.catch(..)在Promise链的每一端添加一个?(如果忘记添加此项,则错误会无声地消失).

Google Chrome中的开发者控制台可以记录它们,我也喜欢在生产环境中记录它们.

对于普通的javascript异常,我使用该window.onerror函数,但Promise中的错误调用此函数.

例:

window.onerror = function (e) {
    alert("unhandled error: " + e);
};

var p = new Promise(function (resolve, reject) {
    var nullObject = null;
    // Raise a TypeError: Cannot read property 'forceNullError' of null
    var x = nullObject.forceNullError(); 
    resolve();
});

p.then(function () { alert('success'); });
Run Code Online (Sandbox Code Playgroud)

JSFiddle:https://jsfiddle.net/f7zwej6L/

*)我注意到WinJS有一个.done(..)我想要的方法,但Native Promises没有.

Val*_*gin 75

整个世界都在等待unhandledrejectionrejectionhandled事件.截至2016年3月,Chrome现在是第一个支持它的人.

例:

window.addEventListener('unhandledrejection', function(event) {
    console.error('Unhandled rejection (promise: ', event.promise, ', reason: ', event.reason, ').');
});
Run Code Online (Sandbox Code Playgroud)

规格:HTML生活标准

Mozilla开发人员: onrejectionhandled,onunhandledrejection

铬的问题:495801,393913


Ben*_*aum 20

请注意,在Node中调用事件unhandledRejection:

process.on('unhandledRejection', function(err, promise) {
    console.error('Unhandled rejection (promise: ', promise, ', reason: ', err, ').');
});
Run Code Online (Sandbox Code Playgroud)

在版本12+上,节点将终止这些拒绝.