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
controller.abort()dispara el evento abort de la señal.signal.throwIfAbortedes el chequeo dentro de un bucle.AbortSignal.timeoutconstruye una señal que se cancela sola.
Palabras clave y builtins usados aquí
Promiseasyncawaitcatchconstfunctionreturntry
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.
Paso 1 de 4 en Cancelar y limitar; paso 15 de 19 en Promesas y async.