typestar

EventEmitter en JavaScript

El patrón observador propio de Node, con once, off y manejo de errores.

import { EventEmitter, once } from "node:events";

class Runner extends EventEmitter {
  finish(tpm) {
    this.emit("run", { tpm });
    if (tpm < 50) this.emit("slow", tpm);
  }
}

const runner = new Runner();
const seen = [];

runner.on("run", ({ tpm }) => seen.push(`run:${tpm}`));
runner.once("slow", (tpm) => seen.push(`slow:${tpm}`));

runner.finish(104);
runner.finish(40);
runner.finish(30);
console.log(seen, runner.listenerCount("run"));

setTimeout(() => runner.emit("run", { tpm: 1 }), 1);
const [payload] = await once(runner, "run");
console.log("awaited", payload.tpm);

Cómo funciona

  1. on suscribe; once se da de baja solo tras dispararse.
  2. Un evento error sin manejar lanza, y es a propósito.
  3. events.once espera la próxima emisión como promesa.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
572
Tokens
189
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 108 segundos.

Escribe este fragmento

Paso 1 de 2 en Eventos y temporizadores; paso 10 de 18 en Node.js.

← Anterior Siguiente →