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

标签 javascript node.js

假设我们有一个附加了一堆事件处理程序的函数。我注意到围绕它们的 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/

相关文章:

javascript - 通过使用 javascript 转换数据类型从字符串创建数组

javascript - JavaScript 是否会在每次递归调用时启动一个新堆栈?

node.js - 为什么我们在nodejs上的javascript中将http服务器传递给websocket实例?

javascript - 使用变量浏览 yaml 文件

javascript - 选择多个字母按钮时,它会替换文本输入

javascript - 让 dojox.layout.ContentPane 等 Dojo 小部件适用于使用 Cordova 和 NetBeans 开发的 Android 应用程序

database - 在没有依赖关系的纯 node.js 中推荐数据库?

node.js - 查找字符串并删除行 - Node.JS

deployment - 部署/构建/制作网络应用程序的基础知识是什么?

javascript - Angular4 - 如何使用 Karma 和 Jasmine 对指令进行单元测试