Promesa frente a setTimeout

Resuelto weisk asked hace 8 años • 7 respuestas

Lo he observado en el siguiente código:

setTimeout(function(){console.log('setTimeout')});
Promise.resolve(1).then(function(){console.log('promise resolve')})

No importa cuántas veces ejecute esto, la devolución de llamada de promesa siempre se registra antes de setTimeout.

Tengo entendido que ambas devoluciones de llamada están programadas para ejecutarse en el siguiente tic, y realmente no entiendo qué está sucediendo que hace que la promesa siempre tenga prioridad sobre el tiempo de espera.

weisk avatar Aug 04 '16 03:08 weisk
Aceptado

Promise.resolve programa una microtarea y setTimeout programa una macrotarea. Y las microtareas se ejecutan antes de ejecutar la siguiente macrotarea.

Mohamed Gara avatar Sep 27 '2017 18:09 Mohamed Gara

Respuesta corta Las promesas tienen mejor prioridad que la función de devolución de llamada setTimeout en la pila de bucle de eventos (o según tengo entendido).

Respuesta larga mira este video. Muy útil. Espero que esto ayude.

https://www.youtube.com/watch?v=8aGhZQkoFbQ

Gracias @MickJuice por el video nuevo y actualizado para el bucle del evento.

https://www.youtube.com/watch?v=cCOL7MC4Pl0

Mykola Borysyuk avatar Aug 03 '2016 20:08 Mykola Borysyuk