Promesas y async
19 pasos en 6 series de JavaScript.
JavaScript corre en un solo hilo y finge lo contrario de forma convincente. Primero las promesas, a fondo, porque async/await es azúcar sintáctica sobre ellas y esa azúcar tiene fugas.
Después iteración asíncrona, planificación con la cola de microtareas, y al final cancelar y limitar el ritmo con AbortController. Diecinueve pasos, y es el tour que explica por qué tu console.log imprimió en ese orden.
Promesas
- PromesasConstruir una promesa y encadenar sus resultados.
- Qué es una promesaUn valor pendiente que se establece una sola vez y ya no cambia.
- EncadenamientoCada then devuelve una promesa nueva, así el valor fluye por la cadena.
- Promesas concurrentesEjecutar muchas operaciones asíncronas a la vez.
- Los cuatro combinadoresall, allSettled, race y any difieren en qué cuenta como terminado.
async y await
- async y awaitEscribir código asíncrono que se lee de forma secuencial.
- Errores en funciones asyncawait convierte un rechazo en un throw, así que try/catch vuelve a funcionar.
- Secuencial o paraleloDos await seguidos esperan dos veces; iniciar ambos primero, no.
- await en un bucle, y otras trampasforEach ignora async, y await dentro de un bucle serializa todo.
Iterar de forma asíncrona
- for awaitConsumir un iterable asíncrono, un valor esperado a la vez.
- El protocolo iterableTodo lo que tenga Symbol.iterator funciona en for-of y con spread.
Planificación
- Microtareas y macrotareasLas promesas se cuelan: cada microtarea corre antes del siguiente temporizador.
- withResolvers y temporizadoresLos ayudantes nuevos: una promesa que estableces desde afuera y un sleep esperable.
- Sleep y timeoutUna promesa que se resuelve tras una espera, más el timeout que compite contra ella.
Cancelar y limitar
- AbortControllerUna señal cancela todo lo que esté escuchando, incluido un temporizador.
- Limitar la concurrenciaUn pool de trabajadores que toma tareas de una cola compartida.
- Reintentos con backoffVolver a intentar, esperando más cada vez, y rendirse en algún momento.
- Fetch con reintentosReintenta una petición fallida con espera creciente: las redes fallan un momento y luego dejan de fallar.
Bis
- fetch-repos.jsTraer los repos de un usuario en concurrencia y clasificarlos por estrellas.