为何这段Node.js事件触发代码仅输出第一条打印语句?
问题原因解析
这段代码只输出第一条语句,核心问题在于事件监听的注册顺序不对。Node.js的EventEmitter要求必须先注册事件监听,再触发对应事件,否则触发事件时没有绑定的回调函数,自然不会执行后续逻辑。
具体执行流程拆解:
- 先注册了
event1事件的回调函数fn1 - 触发
event1事件,执行fn1,此时fn1内部触发fn1事件,但这时候还没给fn1事件绑定任何监听函数 - 等
event1的触发逻辑跑完,才注册fn1事件的监听函数,这时候已经错过了fn1事件的触发时机
如果想让两条语句都输出,只需要把fn1事件的监听注册代码移到emit('event1')之前,修正后的代码如下:
var events = require('events') var eventEmitter = new events.EventEmitter(); var fn1 = function() { console.log("first fn executed on triggering first event ") eventEmitter.emit('fn1') } eventEmitter.on("event1", fn1) // 提前注册fn1事件的监听,确保触发前已绑定 eventEmitter.on('fn1', function() { console.log("This is the fn triggered on 2nd event") }) eventEmitter.emit('event1')
内容的提问来源于stack exchange,提问作者Ochaoash
相关产品推荐
相关产品推荐

