【发布时间】:2017-09-02 01:08:20
【问题描述】:
在 VS Code 中调试时,我从承诺中的 reject(new SomeKindOfError()) 收到未处理的异常错误是否正常,但不是在我不调试时?还是我的代码结构有问题?
根据我从几个关于 Promise 和 stackoverflow 答案的教程中学到的知识,在 Promise 链的最后一个 Promise#catch() 足以捕获链中可能发生的拒绝。但是为什么它仍然被调试器标记为未处理的异常呢?
这是我使用的结构:
function returnAPromise(): Promise<any> {
return new Promise<any>((resolve, reject) => {
// do something here
if (isConditionMet) {
resolve()
} else {
reject(new SomeKindOfError()) // debugger breaks here
}
})
}
someElement.onSomeEvent(() => {
// only care about the errors that might occur
returnAPromise().catch((error) => {
if (error instanceof SomeKindOfError) {
// perform necessary actions when this error occurred
}
})
})
附:我已经尝试过在遇到未处理的异常时不执行 break 的调试,但这有点违背使用调试器的目的:检查可能发生的未处理的异常。
编辑:
另外,我尝试在没有捕获的情况下调用returnAPromise(),并且在调试器控制台中打印了一条警告说rejected promise not handled within 1 second。
【问题讨论】:
-
Nvm 关于我的回答如下。我明白你现在的意思了。我以为你在问为什么它总是在 catch 块中。
-
您真的在那里收到“未经处理的拒绝”吗? Afaik 你可以让你的调试器在每一个被创建的
Error上隐式中断,不管它是否会在以后被捕获。 -
嗨@Bergi,我在帖子中添加了一个屏幕截图。似乎我并没有真正收到未经处理的拒绝,因为我没有收到警告(就像我在编辑中描述的那样),但调试器仍然在那里中断。
-
是的,看起来很像它在错误构造函数上中断。
-
您有什么建议可以抑制这种行为吗?
标签: javascript debugging typescript promise visual-studio-code