【问题标题】:Can you "plug in" to unhandled Promise rejections in Chrome? [duplicate]您可以“插入”Chrome 中未处理的 Promise 拒绝吗? [复制]
【发布时间】:2015-09-25 18:34:37
【问题描述】:

不久前,v8 获得了capability to detect Promises that are rejected but have no handlers attached (commit)。这在 Chrome 中作为一个不错的控制台错误登陆,当您输入错误或忘记附加处理程序时尤其有用:

我想添加一个处理程序以在发生这种情况时采取一些措施(例如,向错误报告服务报告),类似于未捕获的异常模式:

window.addEventListener("error", handler);

或者,我正在寻找任何机制,当一个承诺被拒绝但未在该滴答时处理时,我可以使用该机制自动调用某种回调。

【问题讨论】:

  • 试试window.addEventListener("unhandledrejection", function(e) {});这里有很好的信息:github.com/petkaantonov/bluebird/blob/master/…
  • @Jeff 这些是 ES2015 指定并在 v8 中实现的普通原生 Promise。
  • @BinaryMuse:github.com/domenic/unhandled-rejections-browser-spec。这些事件将成为标准,并且也将在 Chrome 中得到支持。
  • 如果你在 Promise 链的末尾添加一个catch(),你不会得到你需要的吗?
  • 我想知道我们是否应该考虑在另一个方向上进行欺骗关闭——这对我来说似乎更好,并且具有更高的知名度。

标签: javascript google-chrome promise


【解决方案1】:

window.addEventListener('unhandledrejection', e => ...) 出现之前,您可以破解自己的 Promise 构造函数,该构造函数会创建原始 Promise 并在传递时调用 catch

error => {
  var errorEvent = new ErrorEvent('error', {
    message: error.message,
    error: error
  });
  window.dispatchEvent(errorEvent); // For error listeners.
  throw error; // I prefer to see errors on the console.
}

但似乎我们还必须修补 thencatchPromise.reject -- 很多工作。

在这种情况下,有人可能想编写一个 polyfill 来发出自定义 unhandledrejection 事件。

【讨论】:

  • 我正在奖励赏金,因为在 Chrome 没有向我们公开这些 v8 内部结构的情况下,这是最好的选择。
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多