在Node中文文档中看到 "当 EventEmitter 实例遇到错误,通常的处理方法是产生一个 ‘error’ 事件,node 对错误事件做特殊处理。 如果程序没有监听错误事件,程序会按照默认行为在打印出 栈追踪信息 (stack trace) 后退出。"
刚开始的理解是:EventEmitter实例如果在运行中出现错误,Node会检测该实例中是否给’error’事件添加了监听器,如果添加了监听器,会触发监听器;如果没有添加监听器,就会打印出异常,中断线程。于是写了下面代码进行验证。 var e = new EventEmitter(); e.on(‘data’,function(){ console.log(data); //data并未被定义,输出data会报错。 }); e.on(‘error’,function(err){ console.log(“has err”); }); e.emit(‘data’); 经验证,在输出data时产生了error,线程则是直接将error打印出来,并且终止线程,但并未触发e的error事件。 由于英文太菜,不愿查看english DOC,遂在网上查找中文答案,没找到。最后只能查看英文文档。 英文文档中原句:
- To guard against crashing the Node.js process, a listener can be registered on the process object’s uncaughtException event or the domain module can be used. (Note, however, that the domain module has been deprecated)* 原来检测是process上的error事件的监听器。EventEmitter实例在运行时发生错误,Node就会检查process上的error是否添加了监听器,如果添加了监听器,则执行该监听器;如果process的error事件没有添加监听器,Node会打印出异常,并且终止线程。 ps:对于error事件特殊处理还包含domian,由于不懂domian是干什么的,这里就不写了,等学完domian之后,再将补齐。
总结:Node的官方英文文档很重要,要学会阅读英文文档。