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

Javascript try-catch应该如何与多个事件处理程序一起使用?,javascript,node.js,Javascript,Node.js,假设我们有一个函数,它附加了一堆事件处理程序。我注意到他们周围都有一个try-catch,它捕获了事件函数中的内容。应该这样做吗 function attachHandlers() { try { network.on('event1', async (evt) => { ... }); network.on('event2', async (evt) => { ...

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

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

        network.on('event2', async (evt) => {
            ...
        });
    } catch (err) {
        throw err;
    }
  }
或者分别在每个处理程序中尝试捕获

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

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

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

如果想知道处理程序何时抛出错误,可以在
窗口
对象上侦听
错误
事件

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

编辑:由于某种原因,下面的代码段无法“捕获”错误,并且最终在控制台中无法捕获。我在chrome上测试了它,它工作正常

const myBtn=document.getElementById(“myBtn”);
myBtn.addEventListener(“单击”,函数(){
控制台日志(“处理程序1”);
抛出“handler1中的错误”;
});
myBtn.addEventListener(“单击”),函数(错误){
控制台日志(“处理程序2”);
抛出“handler2中的错误”;
});
addEventListener(“错误”,函数(错误){
error.preventDefault();
控制台。错误(“捕获错误”);
返回false;
});

单击
第一个不会捕获在事件处理程序中抛出的错误。
try/catch
事件处理程序周围只有在附加到事件处理程序时发生错误时才会捕获。如果在执行函数时出现错误,它将无法捕获。因此,你需要把它放在里面,就像第二个例子。我发誓我试过了,我试过了,但肯定是在什么地方出错了。谢谢