事件发射器未捕获事件
Event emitter not catching the event
我的emitter.js文件
const EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
export default event
我有另一个文件,其中我 emit
我在 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)
我的emitter.js文件
const EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
export default event
我有另一个文件,其中我 emit
我在 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)