typestar

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

  1. Promise.withResolvers entrega la promesa y sus dos funciones.
  2. Eso reemplaza el truco del resolve declarado con let.
  3. setTimeout envuelto en una promesa es el sleep que JavaScript no tiene.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Planificación; paso 13 de 19 en Promesas y async.

← Anterior Siguiente →