gpt4 book ai didi

typescript promise 拒绝和 vscode 调试器行为

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:45 27 4
gpt4 key购买 nike

我正在尝试使用 typescript 学习 promises,但我遇到了一些问题,了解是什么导致了这种 vscode 调试行为。

例子如下:

// example 1
new Promise((resolve, reject) => {
reject("test1"); // debugger stops as on uncaught exception
})
.catch(
error => {
console.log(error);
}
);
// output: "test1"

,和:

//example 2
new Promise((resolve, reject) => {
setTimeout(() => {
reject("test2"); // debugger never stops
});
})
.catch(
error => {
console.log(error);
}
);
// output: "test2"

如您所见,在一种情况下调试器会在 promise reject 处停止,但在其他情况下不会。但在所有情况下都会捕获到错误,并且没有未处理的异常。

我使用的是 vscode 特定行为还是 es6-promise 绑定(bind)?或者我做的方式不正确?有没有人遇到同样的问题?

最佳答案

这是 VSCode Hook 的 Chrome 调试器使用的启发式方法。他们假设同步拒绝是通常您想打破的程序员错误(如打字错误),而异步拒绝则不是,因为它们通常是 IO(读取文件)。

这是一个非常愚蠢的启发式方法,但在某些情况下通常是有意义的。您可以做的一件事是在调试版本中包含 bluebird(如果您不子类化 Promise,它是 100% 兼容的),然后添加一个未处理的拒绝 Hook :

Promise.onPossiblyUnhandledRejection(function(e, promise) {
throw e;
});

它使用了更好的启发式方法。您也可以使用 native promise (使用拒绝事件)来执行此操作,但我不知道如何关闭同步抛出时的自动中断。

关于typescript promise 拒绝和 vscode 调试器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39063281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com