У меня есть фоновый процесс, написанный в node.js, который использует EventEmitter, например:
var event = { returnValue: undefined };
eventEmitter.emit('name', event, argument);
return event.returnValue; // Example of doing things with event.returnValue.
Другой конец мероприятия:
eventEmitter.on('name', (event, argument) => {
var returnValue = await asyncMethod(); // <- This method returns a Promise, so I could use await if possible or some other solution.
event.returnValue = returnValue;
});
Я пытался найти элегантное решение для использования асинхронных методов, но поскольку EventEmitter вообще не поддерживает асинхронные функции , я не могу использовать await в функции или что-то подобное.
Одним из решений может быть установка returnValue
для Обещания, но это быстро становится непрактичным, особенно потому, что некоторые из моих функций выполняют многократные асинхронные функции.
Мне нужно, чтобы весь код завершился правильно, прежде чем первый блок кода продолжит работу и попытается использовать event.returnValue
.
Является ли мое единственное решение использовать какую-либо стороннюю "синхронизацию", или никто в node.js не задумывался об этой проблеме?
Для меня нет особых проблем, если поток блокируется во время выполнения, так как это фоновый процесс без какого-либо графического интерфейса.