我可以阻止Chrome(v45)暂停拒绝承诺吗?

Mik*_*erg 8 javascript google-chrome promise es6-promise

如果我在Chrome中看到了开发人员工具并且拒绝了Promise,那么Chrome会暂停javascript执行,并显示消息"Paused on promise rejection".我可以在某种程度上阻止Chrome在这种情况下暂停(并且仍然打开devtools)吗?

拒绝承诺是我的应用程序中"正常"流程的一部分,每次发生时都按Chrome中的恢复按钮是不方便的.

您可以在js-console中输入以下内容,在Chrome中测试此行为:

new Promise(function(accept, reject) { reject(); }) // (tested in v 45.0.2454.99)
Run Code Online (Sandbox Code Playgroud)

谢谢.

Ben*_*aum 22

Chrome只会在"来源"标签中启用"暂停未捕获的异常"时执行此操作.

在此输入图像描述

如果你取消它,它不会在错误上暂停.

承诺拒绝概念上是一个错误.这是对它进行心理建模的正确方法,否则以下是无声错误:

Promise.resolve().then(function(){
    JSON.prase("{}"); // unhandled rejection, TypeError, typo
    foooooo = 15; // unhandled ReferenceError, undefined
});
Run Code Online (Sandbox Code Playgroud)

等等.

如果你想明确地抑制拒绝,这类似于同步"全部捕获",你将在同步代码中做同样的事情:

try {
   doSomething();
} catch(e){
    // explicitly ignore all errors.
}
Run Code Online (Sandbox Code Playgroud)

承诺:

doSomething().catch(function(){}); // explicitly don't report rejection
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这解决了我的大部分麻烦.但是,如果"暂停异常"处于活动状态,那么"全部捕获"仍会导致Chrome暂停. (4认同)
  • @Bergi只有当你有"暂停捕获的异常"时才会勾选. (3认同)
  • @MikaelSundberg 那么这绝对是一个错误,我会联系开发工具团队的朋友并解决它。谢谢。 (2认同)
  • https://code.google.com/p/chromium/issues/detail?can=2&q=promises%20devtools%20rejection&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OSid%20Mod 535452&谢谢=535452&ts=1443081694 (2认同)
  • @BenjaminGruenbaum:我不认为这是一个错误。调试器也会在 *thrown* 异常上暂停,不管它们是否被捕获。 (2认同)