在node.js中的两个javascript文件之间发送和接收事件



我正试图使用EventEmitter在两个javascript文件之间进行通信,但我很难让它双向工作。

我有服务器.js:

let api = require('./api')
// Does not work
api.on("yo", data => {
console.log(data)
})
// Works
api.emit("ready", "Server ready") 

和api.js:

const EventEmitter = require('events')
let api = new EventEmitter()
// Works
api.on("ready", data => {
console.log(data)
})
// Does not work
api.emit("yo", "yo yo")
module.exports = api

server.js能够向api.js发出事件,但不能反过来。我尝试过module.exports,并要求两个文件同时存在,但这会导致错误。

如何在这两个文件之间实现双向发射?

首先,api.js被初始化,此时还没有人订阅"yo"事件。因此,在任何模块初始化期间都不应该发出任何事件。尝试在之后以某种方式发出事件。

或者您可以将所有订阅内容移动到另一个模块中,在该模块中,您可以在完成所有订阅后发出任何事件。

因为当我们在server.js的顶部导入api.js时,我们会将其内容添加到server.js内容之前。

因此,我们发出";yo";添加事件侦听器之前的事件,如下所示:

api.emit("yo", "yo yo") 
... 
// this does not work
api.on("yo", data => {
console.log(data)
})

例如,如果我们像Anatoly建议的那样等待1秒,直到模块初始化完成。它的工作原理如下:

setTimeout(() => {
// this works
api.emit("yo", "yo yo")
}, 1000)  

最新更新