#javascript #c #node.js #child-process
#javascript #c #node.js #дочерний процесс
Вопрос:
У меня есть простой index.js
файл узла, который использует источник событий для передачи данных каждые две секунды. В этом файле я экспортирую ссылку на источник события, поскольку я хочу использовать его в другом файле user.js
. Когда я запускаю index.js все работает так, как и ожидалось. Затем, когда я открываю другой ternimal и запускаю user.js он записывает данные на консоль.войдите, как и ожидалось. Что я хотел бы сделать, так это после того, как я создам это событие, создать новый процесс, который будет запускать user.js файл и считывает его выходные данные на текущий терминал вместо того, чтобы использовать отдельные терминалы для получения результата.
index.js
const { EventEmitter } = require('events');
const { spawnSync, spawn } = require('child_process');
const user = { id: 1, name: 'John Doe'}
const myEvent = new EventEmitter();
setInterval(() => {
myEvent.emit('save-user', user);
}, 2000);
;
exports.emitter = myEvent;
user.js
const newEvent = require('./index')
const userEmitter = newEvent.emitter;
userEmitter.on('save-user', (user) => {
console.log('Saving user data', user);
})
Ответ №1:
Здесь немного другой подход: вы можете запустить user.js как родитель и иметь index.js в дочернем процессе.
User.js
const newEvent = require("./index");
const { spawn } = require("child_process");
const userEmitter = newEvent.emitter;
userEmitter.on("save-user", (user) => {
console.log("Saving user data", user);
});
spawn("node", ["./index.js"]);
index.js
const { EventEmitter } = require("events");
const user = { id: 1, name: "John Doe" };
const myEvent = new EventEmitter();
setInterval(() => {
myEvent.emit("save-user", user);
}, 2000);
exports.emitter = myEvent;
Затем запустите node user.js