withResolvers y temporizadores en JavaScript
Los ayudantes nuevos: una promesa que estableces desde afuera y un sleep esperable.
function deferred() {
const { promise, resolve, reject } = Promise.withResolvers();
return { promise, resolve, reject };
}
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
async function main() {
const gate = deferred();
setTimeout(() => gate.resolve("opened"), 5);
console.log(await gate.promise);
const started = Date.now();
await sleep(10);
console.log("slept:", Date.now() - started >= 9);
const failing = deferred();
failing.reject(new Error("closed"));
console.log(await failing.promise.catch((e) => e.message));
}
main();
Cómo funciona
Promise.withResolversentrega la promesa y sus dos funciones.- Eso reemplaza el truco del resolve declarado con let.
setTimeoutenvuelto en una promesa es el sleep que JavaScript no tiene.
Palabras clave y builtins usados aquí
DatePromiseasyncawaitcatchconstfunctionreturn
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 557
- Tokens
- 166
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 95 segundos.
Paso 2 de 3 en Planificación; paso 13 de 19 en Promesas y async.