javascript - Event.preventDefault 似乎不起作用(异步上下文)

标签 javascript firefox error-handling promise unhandled-exception

我知道有几个关于 preventDefault 的问题不工作。但我的问题是关于一个相当简单的案例,你有一个 async函数并抛出错误:

throw 'error of some kind';

...然后您希望有一个“清理”功能来捕获任何和所有此类错误。然后按预期工作:
window.addEventListener('unhandledrejection', function (event) {
    console.log( 'unhandled Promise rejection, event: ', event );

    // event.preventDefault();
});

但是如果我取消注释 event.preventDefault() ,我希望看到 throw消息不会被打印为控制台的错误。但它总是如此打印。

我检查以确保 event确实是cancelable在这种情况下。它声称是这样。

PS从我的实验看来似乎是
window.onunhandledrejection = event => {
    ...
};

只是为同一个“unhandledrejection”事件实现同一个监听器的另一种方式。使用 event.preventDefault()似乎也没有工作。

编辑

经过几次实验,我似乎发现我能找到防止这种情况的唯一方法是在某个时候吞下错误(使用 try...catch ),最好是在最高 async在堆栈中调用(或者更确切地说是在 async 函数的调用序列中),如果可以确定的话。

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"
})

最佳答案

已在 Firefox 76 上验证。直接 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"
})

关于javascript - Event.preventDefault 似乎不起作用(异步上下文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62100577/

相关文章:

php - 获取错误 undefined offset : 1

.net - 在暴露给 COM 的 C# 对象上实现 ISupportErrorInfo

Javascript 模板 - 使用 #{variable} 语法

css - chrome 按钮之间的间隙

javascript - NgRoute 在 jsfiddle 中不起作用

firefox - Firebug 在 Mozilla Firefox 56 版中不起作用

html - 关于 HTML5 在 Firefox 上的新功能占位符

PHP 处理 fatal error ,并将它们存储在文件中

javascript - 如何在不使用 return 的情况下跳过下一个 if 语句?

javascript - ChartJS : Show all tooltips with Total for Multi Pie chart