Promesa frente a setTimeout
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.
Promise.resolve programa una microtarea y setTimeout programa una macrotarea. Y las microtareas se ejecutan antes de ejecutar la siguiente macrotarea.
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