Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

172
Vistas
¿Cuándo Promise.all realmente pone en cola una microtarea?

Así que soy nuevo en las promesas y estoy probando algunas cosas para descubrir qué está pasando debajo del capó. Por lo que leí, un trabajo se pone en cola en la cola de Microtask. Luego, inmediatamente después de la promesa, el método se encadenó para resolver.

 Promise.resolve("FIRST") .then((m) => console.log(m)) .then(() => console.log("FIRST on second level")) .then(() => console.log("FIRST on third level")) .then(() => console.log("FIRST on fourth level")); Promise.resolve("SECOND") .then((m) => console.log(m)) .then(() => console.log("SECOND on second level")) .then(() => console.log("SECOND on third level")) .then(() => console.log("SECOND on fourth level")); Promise.all([ Promise.resolve("Middle 1 resolved"), Promise.resolve("Middle 2 resolved"), ]).then((results) => console.log(results));

Entonces, está bien, el primero .entonces de la PRIMERA cadena se pone en cola de inmediato. Lo mismo ocurre con el primero de la SEGUNDA cadena. Pero ambos devuelven promesas que estarán pendientes hasta que se ejecuten los dos primeros trabajos en cola. Entonces, ¿por qué el registro es así?

 FIRST SECOND FIRST on second level SECOND on second level [ 'Middle 1 resolved', 'Middle 2 resolved' ] FIRST on third level SECOND on third level FIRST on fourth level SECOND on fourth level

¿Por qué el registro "medio" no se coloca antes de "PRIMERO en el segundo nivel"? Porque asumí por lo que leí que la promesa devuelta de Promise.all EN ESTE EJEMPLO se resolverá siempre que la pila esté vacía y, por lo tanto, se pondrá en cola justo después de los dos primeros:

 then(m => console.log(m)) //on line 2 and line 8

Entonces, ¿dónde estoy equivocado? ¿Qué me estoy perdiendo o no entiendo correctamente? ¡Gracias de antemano!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Promise.all crea una nueva promesa, y para que sepa cuándo resolver esa promesa, debe llamar a .then en cada una de las promesas que le pasa. Entonces, primero deben resolverse las promesas en la matriz, luego la promesa creada por Promise.all puede resolverse, y solo entonces se llama a su console.log.

En otras palabras, hay 2 niveles de llamadas a .then , al igual que sus otros ejemplos de segundo nivel. Es solo que un nivel está oculto dentro de la implementación de Promise.all

Si ayuda, aquí hay una aproximación de lo que está haciendo Promise.all:

 function all(promises) { return new Promise((resolve) => { let count = 0; let results = []; for (let i = 0; i < promises.length; i++) { promises[i].then(result => { count++; results[i] = result; if (count === promises.length) { resolve(results); } }); } }); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda