Насколько я понимаю, полная очередь задач микрозадачи обрабатывается после каждой макрозадачи.
Если это так, почему обратный вызов setTimeout
выполняется после Promise
Микрозадачи в следующем фрагменте JavaScript
?
console.log('start');
setTimeout(() => {
console.log("setTimeout");
});
Promise.resolve().then(function() {
console.log('promise');
});
console.log('end');
Выводит следующее:
> "start"
> "end"
> "promise"
> "setTimeout"
Это из-за задержки ~ 4ms
, навязанной современными браузерами?
С MDN :
В современных браузерах вызовы setTimeout()
/ setInterval()
сокращаются до минимума один раз каждые 4 мс, когда срабатывают последовательные вызовы из-заВложение обратного вызова (где уровень вложенности составляет, по крайней мере, определенную глубину) или после определенного количества последовательных интервалов.
Хотя это говорит о том, что это верно только для последовательного вложения обратного вызова.