queueMicrotask
Это браузерное API, которое выполняет переданный код асинхронно.
Принимает функцию, которая будет передана в очередь микрозадач;
Возвращает undefined.
queueMicrotask(() => {
console.log('Хэй, я выполнюсь асинхронно!')
})
Код выше схож со сценарием использования setTimeout(). Оба выполнят код асинхронно:
setTimeout(() => {
console.log('Хэй, я выполнюсь асинхронно благодаря setTimeout')
}, 0)
Так в чем же принципиальная разница между ними?
queueMicrotask() добавляет переданную функцию в очередь микрозадач. Функции в этой очереди выполняются одна за другой (FIFO: First in First Out) — когда текущая функция выполнилась, запускается следующая функция в очереди.
Все микрозадачи в очереди будут выполнены только после того, как текущий стек вызовов окажется пустым, но перед выполнением следующей макрозадачей.
Если вернуться к сравнению с setTimeout(), то передаваемые в него функции этого относятся к макрозадачам. Каждая из них будет взята из очереди задач, после того как управление передастся циклу событий.
Поэтому, если вызвать queueMicrotask() после setTimeout(), или наоборот — функция, переданная в queueMicrotask(), начнёт своё исполнение первой.
👉 @seniorFront