node:events
O módulo node:events no Azion Runtime: a classe EventEmitter, as APIs suportadas e exemplos de listeners, handlers assíncronos e subclasses.
O módulo node:events fornece EventEmitter, a classe do Node.js para código orientado a eventos. Um event emitter é um objeto que emite eventos nomeados, e os listeners registrados nele são executados cada vez que ele emite um desses nomes. No Azion Runtime, as functions o usam para desacoplar a lógica: uma parte do código emite um evento e listeners dedicados reagem a ele.
Exemplos
Cada exemplo é uma function completa que importa EventEmitter de node:events. A resposta abaixo de cada exemplo é a que uma function com deploy feito retorna.
Emissão básica de eventos
Esta function registra um listener para um evento e depois emite esse evento com três argumentos:
O listener registra an event occurred! 1 2 3 no log e a function responde com:
Eventos do ciclo de vida da requisição
Esta function emite um evento por etapa de processamento da requisição e registra o que cada listener recebeu:
Para uma requisição a https://example.com/, a function responde com as três etapas na ordem em que as emitiu:
Listeners de execução única e tratamento de erros
Esta function registra um listener que é executado uma única vez, dois listeners para o mesmo evento e um listener para o evento error:
A function responde com uma entrada Initialized, as entradas dos dois listeners para cada chunk e o erro:
Handlers de eventos assíncronos
Esta function emite um evento a partir de cada uma de duas chamadas fetch em paralelo e aguarda as duas chamadas com Promise.all(). emit() não aguarda uma Promise que um listener retorna, por isso a function aguarda as próprias chamadas fetch:
A function responde com os resultados que o listener coletou e os resultados que Promise.all() retornou:
Classe EventEmitter personalizada
Esta function estende EventEmitter em uma classe para um domínio específico, processa duas requisições com ela e conta os listeners de um evento:
Para uma requisição a https://example.com/, a function responde com o log das duas requisições e a contagem de requisições:
APIs suportadas
A tabela lista o status de cada API de node:events no Azion Runtime:
| API | Status |
|---|---|
new EventEmitter() | 🟢 Com suporte |
emitter.on() | 🟢 Com suporte |
emitter.once() | 🟢 Com suporte |
emitter.emit() | 🟢 Com suporte |
emitter.off() | 🟢 Com suporte |
emitter.removeListener() | 🟢 Com suporte |
emitter.removeAllListeners() | 🟢 Com suporte |
emitter.listenerCount() | 🟢 Com suporte |
emitter.listeners() | 🟢 Com suporte |
emitter.eventNames() | 🟢 Com suporte |
emitter.prependListener() | 🟢 Com suporte |
emitter.prependOnceListener() | 🟢 Com suporte |
emitter.setMaxListeners() | 🟢 Com suporte |
emitter.getMaxListeners() | 🟢 Com suporte |
EventEmitter.listenerCount() | 🟢 Com suporte |
EventEmitter.defaultMaxListeners | 🟢 Com suporte |
events.once() | 🟢 Com suporte |
captureRejections | 🟡 Parcialmente suportado |
As APIs marcadas como 🟡 Parcialmente suportado têm funcionalidade limitada em comparação com a implementação completa do Node.js. A opção captureRejections é uma delas; por isso, trate as rejeições de Promise explicitamente em listeners assíncronos em vez de depender da captura automática.
No Azion Runtime, a função de nível de módulo events.once() retorna uma Promise que é resolvida com um array dos argumentos que o evento carregou. Um evento error emitido sem um listener de error lança o erro emitido. Quando um evento tem mais listeners do que o limite definido com emitter.setMaxListeners(), o runtime registra este aviso no log: