You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:55:27