我试图了解如何在嵌套回调中使用try / catch。为什么这段代码没有抓住我的新错误?
function test(cb) {
setTimeout(function() {
throw new Error("timeout Error");
}, 2000);
}
try {
test(function(e) {
console.log(e);
});
} catch (e) {
console.log(e);
}
答案 0 :(得分:8)
当传递给setTimeout
的函数运行时,错误以异步方式发生。抛出错误时,test
函数已经完成执行。
答案 1 :(得分:1)
有许多方法可以为Javascript执行设置计时器。这是使用Promise.race()的一种方式:
(async () => {
try {
await Promise.race([
// Timer.
new Promise((res, rej) => {
setTimeout(() => {
rej("Timeout error!");
}, 2000);
}),
// Code being timed.
new Promise((res, rej) => {
// Do some stuff here.
// If it takes longer than 2 seconds it will fail.
res("Finished in under 2 seconds.");
})
]);
} catch (err) {
console.log("we got an err: " + err);
}
})();