gpt4 book ai didi

javascript - 事件发射器未捕获事件

转载 作者:行者123 更新时间:2023-11-30 19:47:24 25 4
gpt4 key购买 nike

我的 emitter.js 文件

const EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
export default event

我有另一个文件,其中我发出我在 api 路由中的事件

import Emitter from '../../config/emitter'

Emitter.emit('RIDING_STATUS', socketdriver)

在这里,我在 index.js

中捕获事件
import Emitter from '../config/emitter'

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

但问题是上述事件不会触发我的 index.js 中的 RIDING_STATUS

有人可以让我知道我在这里做错了什么吗。

最佳答案

您有竞争条件。顺序可能没有明确定义,但是您在附加监听器之前触发了一个事件。

以下不起作用(例如):

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 中

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 确保在触发事件发射器之前完成所有设置代码。

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

import Emitter from '../../config/emitter'

setTimeout(()=>Emitter.emit('RIDING_STATUS', socketdriver),0)

关于javascript - 事件发射器未捕获事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54823981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com