typestar

AbortController en JavaScript

Una señal cancela todo lo que esté escuchando, incluido un temporizador.

function delay(ms, signal) {
  return new Promise((resolve, reject) => {
    const timer = setTimeout(resolve, ms);
    signal?.addEventListener("abort", () => {
      clearTimeout(timer);
      reject(signal.reason);
    }, { once: true });
  });
}

async function main() {
  const controller = new AbortController();
  setTimeout(() => controller.abort(new Error("changed my mind")), 5);

  try {
    await delay(50, controller.signal);
  } catch (error) {
    console.log("canceled:", error.message);
  }

  try {
    await delay(50, AbortSignal.timeout(5));
  } catch (error) {
    console.log("timed out:", error.name);
  }
}

main();

Cómo funciona

  1. controller.abort() dispara el evento abort de la señal.
  2. signal.throwIfAborted es el chequeo dentro de un bucle.
  3. AbortSignal.timeout construye una señal que se cancela sola.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
28
Caracteres a escribir
579
Tokens
166
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 91 segundos.

Escribe este fragmento

Paso 1 de 4 en Cancelar y limitar; paso 15 de 19 en Promesas y async.

← Anterior Siguiente →