javascript - 在 Node.js 中处理滴答(或堆栈)之间的异常的策略?

标签 javascript node.js

<分区>

我有以下内容:

var  http = require('http');

server = http.createServer(function(request, response) { 
  try {
    // Register a callback: this happens on a new stack on some later tick
    request.on('end', function() {
      throw new Error; // Not caught
    })

    throw new Error; // Caught below
  }
  catch (e) {
    // Handle logic
  }
}

现在,第一个 Errortry...catch 捕获,但第二个 Error 似乎没有被捕获.

几个问题:

  • 第二个错误 是否因为发生在不同的堆栈上而未被捕获?如果是这样,我是否理解 try...catch 行为不受词法约束,而是取决于当前堆栈?我的解释正确吗?
  • 是否有任何经过充分探索的模式来处理此类问题?

最佳答案

在这种情况下,您也可以使用简单的 EventEmitter 来处理错误。

var http = require('http');
var EventEmitter = require("events").EventEmitter; 

server = http.createServer(function(request, response) { 
    var errorHandler = new EventEmitter;
    // Register a callback: this happens on a new stack on some later tick
    request.on('end', function() {
      if(someCondition) {
        errorHandler.emit("error", new Error("Something went terribly wrong"));
      }
    });

    errorHandler.on("error", function(err) {
      // tell me what the trouble is....
    });
});

关于javascript - 在 Node.js 中处理滴答(或堆栈)之间的异常的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17889867/

相关文章:

javascript - 从事件处理程序写入 WriteStream

javascript - JSONArray 创建后出现额外的数字

node.js - Gas 资金不足 * 价格 + 值(value)

javascript - 加载youtube视频后打开网站

javascript - 在 HTML 上方绘制箭头

javascript - 使用 History API pushState 设置后获取历史状态对象

node.js - Npm 安装在 Windows 10 上挂起并失败

node.js - 对 Node.js 日志记录系统进行基准测试——我是否遗漏了一些相关信息?

javascript - 如何仅在特定页面或页面上运行 javascript 函数?

javascript - 在元素名称上使用迭代器变量?