捕获所有未处理的javascript承诺拒绝
Catch all unhandled javascript promise rejections
我想捕获在javascript承诺中发生的所有未处理的异常/拒绝。有没有一种很好的方法来捕捉它们,而不需要在承诺链的每一端添加.catch(..)
?(如果忘记添加这个,错误会自动消失)。
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'); });
JSFiddle: https://jsfiddle.net/f7zwej6L/
*)我注意到WinJS有一个.done(..)
方法我想要的,但原生承诺没有。
全世界都在等待unhandledrejection
和rejectionhandled
事件。截至2016年3月,Chrome现在是第一个支持它的。
的例子:
window.addEventListener('unhandledrejection', function(event) {
console.error('Unhandled rejection (promise: ', event.promise, ', reason: ', event.reason, ').');
});
规范:HTML生活标准
Mozilla开发人员:onrejectionhandled, onunhandledrejection
Chromium issue: 495801,393913
请注意,在Node中事件被称为unhandledRejection
:
process.on('unhandledRejection', function(err, promise) {
console.error('Unhandled rejection (promise: ', promise, ', reason: ', err, ').');
});
在12+版本中,节点将在这些拒绝时终止。
一些库有自己的api来做这件事。有些浏览器迟早会报告未处理的拒绝。
实际上,done
可能不做你想要的。这就是为什么它不是规范的一部分。在任何情况下,你仍然要记住调用它。
没有可靠的、跨平台的、跨库的方法来做到这一点。
uncaught库可以帮助您捕获未处理的承诺拒绝。
它也处理未捕获的错误。
编辑
<script type="text/javascript" src=".../uncaught/lib/index.js"></script>
<script type="text/javascript">
uncaught.start();
uncaught.addListener(function (error) {
console.log('Uncaught error or rejection: ', error.message);
});
</script>
相关文章:
- JavaScript承诺-无法读取属性'那么'的未定义
- JavaScript承诺的定义以及与事件的区别
- 当链接javascript承诺时,如何处理then()函数中的条件
- 对javascript承诺的后备支持
- 同步 Javascript 承诺超时以加班 Google 地理编码查询限制
- 执行一系列 Javascript 承诺一个接一个地解决
- 如何在恢复函数之前等待 JavaScript 承诺解析
- 用Javascript承诺包装同步代码有什么好处吗
- javascript承诺在循环中或如何逐个调用函数
- Javascript承诺:then()'s是't同步
- Javascript承诺-检索结果
- JavaScript承诺使用Mongoose
- javascript承诺和未来类似于C++
- Javascript承诺并更新变量
- Javascript承诺动态回调
- 具有JavaScript承诺的多个函数
- Javascript承诺:它们能在用户空间代码中完全实现吗
- 如何链接javascript承诺和错误
- Javascript-承诺保留为挂起状态
- 以处理错误的方式启动javascript承诺蓝鸟链