gpt4 book ai didi

javascript - try-catch 应该如何与多个事件处理程序一起使用?

转载 作者:搜寻专家 更新时间:2023-10-31 23:50:42 26 4
gpt4 key购买 nike

假设我们有一个附加了一堆事件处理程序的函数。我注意到围绕它们的 try-catch 捕获了事件函数中的内容。应该这样做吗?

function attachHandlers() {
try {
network.on('event1', async (evt) => {
...
});

network.on('event2', async (evt) => {
...
});
} catch (err) {
throw err;
}
}

或者分别在每个处理程序中 try catch ?

  function attachHandlers() {
network.on('event1', async (evt) => {
try {
...
} catch (err) {
throw err;
}
});

network.on('event2', async (evt) => {
try {
...
} catch (err) {
throw err;
}
});
}

最佳答案

正如其他人所说,围绕监听器附件的 try/catch 不会捕获处理程序内部抛出的错误。

如果您想知道处理程序何时抛出错误,您可以监听 window 对象上的 error 事件。

如果你想捕获它们,你可以在 errorHandler 的 errorEvent 上使用 preventDefault

编辑:出于某种原因,下面的代码片段没有“捕获”错误,最终在控制台中未被捕获。我在 chrome 上测试过它,它可以工作。

const myBtn = document.getElementById("myBtn");

myBtn.addEventListener("click", function() {
console.log("handler 1");
throw "Error in handler1";

});

myBtn.addEventListener("click", function(error) {
console.log("handler 2");
throw "Error in handler2";
});

window.addEventListener("error", function (error) {
error.preventDefault();
console.error("Error caught");
return false;
});
<button id="myBtn">Click</button>

关于javascript - try-catch 应该如何与多个事件处理程序一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50587975/

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