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
onsuscribe;oncese da de baja solo tras dispararse.- Un evento
errorsin manejar lanza, y es a propósito. events.onceespera la próxima emisión como promesa.
Palabras clave y builtins usados aquí
awaitclassconstextendsfromifimportthis
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.
Paso 1 de 2 en Eventos y temporizadores; paso 10 de 18 en Node.js.