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

96
Vistas
Eventloop en JavaScript con promesas

Hasta el día de hoy, pensé que sabía cómo funciona el bucle de eventos en javascript, pero me he enfrentado a un problema realmente extraño. Quizás no te resulte extraño, entonces te agradecería que me lo explicaras, así que aquí el ejemplo de código:

 Promise.resolve() .then(() => { Promise.resolve().then(() => { Promise.resolve().then(() => { Promise.resolve().then(() => { console.log('first mega inner then') }) console.log('first very inner then') }) console.log('first inner then') }) console.log('first then') }) .then(() => { Promise.resolve().then(() => { Promise.resolve().then(() => { console.log('second very inner then') }) console.log('second inner then') }) console.log('second then') })

¿Por qué el orden de console.logs es:

  1. primero luego
  2. primero interior luego
  3. segundo entonces
  4. primero muy interior luego
  5. segundo interior entonces
  6. primero mega interior luego
  7. segundo muy interno entonces

Yo personalmente esperaba que fuera:

  1. primero luego
  2. primero interior luego
  3. primero muy interior luego
  4. primero mega interior luego
  5. segundo entonces
  6. segundo interior entonces
  7. segundo muy interno entonces

Pero no es el final... Lo más interesante para mí es cuando agrego queueMicrotask después del segundo "entonces"

 some code here... .then(() => { Promise.resolve().then(() => { Promise.resolve().then(() => { console.log('second very inner then') }) console.log('second inner then') }) console.log('second then') }) queueMicrotask(() => console.log('microtask'))

SE EJECUTA DESPUÉS DEL PRIMER "ENTONCES", por lo que el orden ahora es:

  1. primero luego
  2. microtarea
  3. primero interior luego
  4. segundo entonces
  5. primero muy interior luego
  6. segundo interior entonces
  7. primero mega interior luego
  8. segundo muy interno entonces

¿Qué está pasando? No entiendo nada. Creo que esto es lo último que no entiendo en JS y te agradecería mucho si puedes explicar por qué funciona así, no podré dormir hasta que sepa esto 😂

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

0

Puede haber un malentendido de cómo se usa promesa aquí. En el encadenamiento de promesas, el método .then se activa tan pronto como se resuelve la promesa. Si desea retrasar la acción de la segunda parte de la cadena, debe especificar cuándo resolver en una nueva promesa. Este ejemplo muestra cómo funcionaría.

Cuando llama a Promise.resolve().then llama al método resolve de la clase Promise y hace que el método entonces esté disponible inmediatamente. Aunque no está retrasando la resolución cuando llama al método de resolución de inmediato, aún lleva algún tiempo realizar la resolución, por lo que la siguiente línea de código no se bloqueará.

Espero que esto proporcione una idea de la magia de Promise en js

 (new Promise(resolve => { Promise.resolve().then(() => { Promise.resolve().then(() => { Promise.resolve().then(() => { console.log('first mega inner then') resolve(); }) console.log('first very inner then') }) console.log('first inner then') }) console.log('first then') })) .then(() => { Promise.resolve().then(() => { Promise.resolve().then(() => { console.log('second very inner then');; }); console.log('second inner then'); }); console.log('second then'); });

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