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

问题描述 投票:0回答:2

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

我有server.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 并同时要求两个文件分别存在,但这会导致错误。

如何实现这两个文件之间的双向发射/打开?

javascript node.js eventemitter
2个回答
1
投票

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

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


0
投票

因为当我们在 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)  
© www.soinside.com 2019 - 2024. All rights reserved.