← Cloudflare Workers / workers / runtime-apis / nodejs
EventEmitter
Одна EventEmitter ↗
это объект, который генерирует именованные события, вызывающие срабатывание слушателей.
import { EventEmitter } from "node:events";
const emitter = new EventEmitter();
emitter.on("hello", (...args) => {
console.log(...args); // 1 2 3
});
emitter.emit("hello", 1, 2, 3);Реализация в Workers runtime поддерживает весь Node.js EventEmitter API. Сюда входит captureRejections ↗
параметр, который позволяет улучшить обработку async-функций в качестве обработчиков событий:
const emitter = new EventEmitter({ captureRejections: true });
emitter.on("hello", async (...args) => {
throw new Error("boom");
});
emitter.on("error", (err) => {
// the async promise rejection is emitted here!
});Подобно Node.js, когда 'error' событие создаётся на EventEmitter а если
для него нет обработчика, ошибка будет выброшена немедленно. Однако в Node.js
можно добавить обработчик на process объект для
'uncaughtException' событие для перехвата необработанных на глобальном уровне исключений.
'uncaughtException' событие в настоящее время не реализовано в среде выполнения
Workers. Настоятельно рекомендуется всегда добавлять 'error' обработчик
к любому EventEmitter инстанс.
См. документация Node.js для EventEmitter ↗, где это описано подробнее.