Отправитель события в NodeJS EventEmitter

В приложении NodeJS, которое разветвляет несколько дочерних процессов, мне нужно знать, когда дочерний процесс завершается, проблема заключается в том, что функция обратного вызова, вызываемая EventEmitter, не имеет отправителя события.

Я много занимался разработкой .NET, и их событие всегда имеет параметр sender и параметр arguments.

Как узнать, какой дочерний процесс отправил событие?

я могу сделать что-то вроде

const childProcess = fork(...) childProcess.on('exit', function(code, signal) { myCallback(childProcess, code, signal); }

но тогда я не смогу отменить регистрацию в этом конкретном обработчике событий.


person Ido Ran    schedule 15.10.2017    source источник
comment
Простите, вы говорите, что вам нужно сейчас, кто именно послал сигнал об убийстве на ваш childProcess? Почему?   -  person Damaged Organic    schedule 15.10.2017
comment
В Javascript у вас есть доступ к родительской области при вызове обработчика событий, и вы можете настроить родительскую область так, чтобы в ней была переменная, которая идентифицирует, какой дочерний процесс это. Если вы покажете нам более широкий контекст того, как вы создаете несколько дочерних процессов, мы могли бы посоветовать вам более конкретно.   -  person jfriend00    schedule 16.10.2017


Ответы (2)


Ответ this будет установлен для ссылки на отправителя.

Источник https://nodejs.org/api/events.html#events_passing_arguments_and_this_to_listeners

Метод eventEmitter.emit() позволяет передавать произвольный набор аргументов функциям прослушивателя. Важно иметь в виду, что когда EventEmitter вызывает обычную функцию слушателя, стандартное ключевое слово this намеренно устанавливается для ссылки на EventEmitter, к которому прикреплен слушатель.

person Ido Ran    schedule 16.10.2017

Cluster.worker.pid обычно является отличным способом получить идентификатор процесса (поскольку fork вызывает такое событие).

console.log(cluster.worker.pid);

person Patrick Sturm    schedule 15.10.2017
comment
Спасибо, но в родительском процессе я слушаю событие выхода нескольких дочерних процессов, мне нужно знать, какой дочерний процесс отправляет событие. process.pid всегда будет давать мне pid родительского процесса - person Ido Ran; 16.10.2017