请考虑以下代码:
new Promise((resolve, reject) => {
breaksomething() //won't pause
})
breaksomething() //pause as expected!
我期待我的调试器暂停执行 - 因为一个未定义的函数 - 在breaksomething()
内的行promise
...但是我只得到以下错误输出:
“ReferenceError:breakomething未定义”
(没有暂停)。当遇到异常时,调试器在其他任何地方按预期暂停,问题仅在Promise范围内。我确实在断点下勾选了所有例外和未捕获的例外。
我正在使用:
Visual Studio Code 1.17.2
节点8.8.1
Inspector调试器
答案 0 :(得分:4)
<强>更新强> 根据Microsoft团队的latest update on a known issue,这是VS代码中的一个已知问题。
您必须在VS代码中的断点设置中取消检查All Exceptions
和Uncaught Exceptions
才能使其正常工作
答案 1 :(得分:1)
调试后我发现这种情况正在发生,因为Promise库是在Native代码中实现的
因此,当您创建Promise时,内部函数实际上是由Native代码调用的,并且异常会返回到它。这可能是VS调试器未捕获的原因之一。
这样做不可能吗? JetBrains的WebStorm也可以打破这些例外。现在他们是如何做到的以及为什么VS Code无法做到这一点,这超出了我的理解范围。最好针对VS代码打开一个问题,并引用WebStorm来做。因此,在技术上可以打破这种异常
答案 2 :(得分:0)
我仍然不清楚为什么会出现这个问题,但我找到了解决方法。只需安装bluebird并在应用的初始化代码中添加以下内容:
global.Promise = require("bluebird");
...这会覆盖默认的nodejs Promise并在勾选“All exceptions”时按预期中断