VS-Code不会在Promise

时间:2017-10-27 12:18:25

标签: javascript node.js debugging promise visual-studio-code

请考虑以下代码:

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调试器

3 个答案:

答案 0 :(得分:4)

<强>更新 根据Microsoft团队的latest update on a known issue,这是VS代码中的一个已知问题。

您必须在VS代码中的断点设置中取消检查All ExceptionsUncaught Exceptions才能使其正常工作

debugger works without 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”时按预期中断