Отправка и получение событий между двумя файлами javascript в node.js

Я пытаюсь установить связь между двумя файлами javascript с помощью EventEmitter, но я изо всех сил пытаюсь заставить его работать в обоих направлениях.

У меня есть 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 и одновременно запрашивал оба файла друг в друге, но это вызывало ошибки.

Как я могу выполнить двусторонние выбросы/включения между этими двумя файлами?


person Dshiz    schedule 19.09.2020    source источник


Ответы (1)


Сначала инициализируется api.js, и в этот момент еще никто не подписан на событие 'yo'. Таким образом, вы вообще не должны генерировать какие-либо события во время инициализации любого модуля. Попробуйте потом как-то генерировать события.

ИЛИ вы можете переместить все материалы для подписки в другой модуль, в котором вы можете генерировать любое событие после завершения всех подписок.

person Anatoly    schedule 19.09.2020
comment
Прошу прощения, но я все еще в замешательстве. В конечном счете, я хочу, чтобы api.js мог получать и отправлять события любому количеству других модулей, включая server.js. - person Dshiz; 20.09.2020
comment
Но вы также вызываете api.emit("yo", "yo yo") в api.js, пока api.js инициализируется. Попробуйте генерировать события позже, когда все модули уже инициализированы. - person Anatoly; 20.09.2020