mik*_*ent 8 javascript error-handling firefox unhandled-exception promise
我意识到有一些关于preventDefault不工作的问题。但我的问题是关于相当简单的情况,即您有一个async函数并且抛出错误:
throw 'error of some kind';
Run Code Online (Sandbox Code Playgroud)
...然后你想要有一个“清理”功能来捕获任何和所有此类错误。然后这将按预期工作:
window.addEventListener('unhandledrejection', function (event) {
console.log( 'unhandled Promise rejection, event: ', event );
// event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
但如果我取消注释event.preventDefault(),我希望看到该throw消息不会作为错误打印到控制台。但它总是被打印出来。
我检查了一下以确保在这种情况下event确实如此cancelable。据称确实如此。
PS从我的实验看来是这样的
window.onunhandledrejection = event => {
...
};
Run Code Online (Sandbox Code Playgroud)
只是针对同一“unhandledrejection”事件实现同一侦听器的另一种方法。使用event.preventDefault()那里似乎也不起作用。
编辑
经过几次实验后,我似乎发现防止这种情况发生的唯一方法是try...catch在某个时刻吞掉错误(使用 ),最好是在堆栈中的最高async调用处(或者更确切地说,在函数调用序列中async),如果可以确定的话。
throw 'error of some kind';
Run Code Online (Sandbox Code Playgroud)
在 Firefox 76 上验证。Straight Promise 也不起作用。看起来像一个错误。可能应该向 Mozilla 的 Firefox 跟踪器提出问题。
注意:这不是解决方案。除了提交错误并修复它之外,是否还有其他解决方案值得怀疑。
window.onerror = msg => console.log(msg) || false
window.addEventListener('unhandledrejection', event => {
console.log(event.cancelable, event.reason, "unhandled rejection")
event.preventDefault()
event.stopPropagation()
event.stopImmediatePropagation()
return false
})
async function x() {
console.log('async')
throw "async error"
}
x()
new Promise(res => {
console.log('prom')
throw "prom error"
})Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |