首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >事件发射器未捕获事件

事件发射器未捕获事件
EN

Stack Overflow用户
提问于 2019-02-22 09:32:23
回答 1查看 1.3K关注 0票数 1

我的emitter.js文件

代码语言:javascript
运行
复制
const EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
export default event

我有另一个文件,其中我在api路由中emit事件。

代码语言:javascript
运行
复制
import Emitter from '../../config/emitter'

Emitter.emit('RIDING_STATUS', socketdriver)

在这里,我在index.js上看到了这个事件

代码语言:javascript
运行
复制
import Emitter from '../config/emitter'

Emitter.on('RIDING_STATUS', async(data) => {
  console.log("Caught the event")
})

但问题是上面的事件并没有在我的RIDING_STATUS index.js中触发。

有人能告诉我我在这里做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 09:40:23

你有种族问题。顺序可能没有很好的定义,但是在附加侦听器之前会触发一个事件。

以下内容不起作用(例如):

代码语言:javascript
运行
复制
const EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();

event.emit('RIDING_STATUS');

//will never be triggered as the emit has already been fired.
event.on('RIDING_STATUS', async(data) => {
  console.log("Caught the event")
});

若要确保事件仅在连接侦听器之后发出,请将其放入setTimeout中。

代码语言:javascript
运行
复制
const EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();

//Delay the emit event until after all setup code is complete
setTimeout(()=>event.emit('RIDING_STATUS'),0);

event.on('RIDING_STATUS', async(data) => {
  console.log("Caught the event")
});

setTimeout确保在激发事件发射器之前完成所有设置代码。

因此,要引用上面的代码,中间的代码块应该是:

代码语言:javascript
运行
复制
import Emitter from '../../config/emitter'

setTimeout(()=>Emitter.emit('RIDING_STATUS', socketdriver),0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54823981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档