Кто первый между макрозадачей и микрозадачей в javascript? - PullRequest
0 голосов
/ 27 февраля 2020

Я запутался, какое задание выполняется первым по событию l oop.

Причина указана ниже.

Ответ Stackoverflow от this

После завершения этой макрозадачи все доступные микрозадачи будут обработаны

Аналогичный пример из этой статьи блога

setTimeout(() => console.log('Macro task'), 0);
Promise.resolve().then(() => console.log('Micro task'));

Итак, меня это очень смущает. До сих пор я понял следующее:

  1. Код, который не является функцией обратного вызова, сразу вставляется в стек вызовов.
  2. Функция обратного вызова setTimeout() вставляется в очередь задач макроса.
  3. Функция обратного вызова Promise вставлена ​​в очередь микро-задач.
  4. Когда стек вызовов пуст, событие l oop берет задачу из очереди микро-задач и запускается.
  5. После выполнения всех микро-задач событие l oop берет задачу из очереди макрокоманд и запускается.

Этот процесс - мое понимание, и я прав?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Очередь микро-задач проверяется сразу после завершения скрипта, я думаю. Это перед проверкой очереди макро-задач.

См. здесь для получения подробной информации.

0 голосов
/ 27 февраля 2020

Поскольку сам скрипт обрабатывается как макрозадача , так что в конце выполняются поставленные в очередь микрозадачи.

Таким образом, обещание является микрозадачей, обратный вызов setTimeout является макрозадачей, но скрипт также является макрозадачей.

В результате script -> обещание -> setTimeout

Подробнее здесь: https://medium.com/javascript-in-plain-english/javascript-event-loop-y-promises-951ba6845899

...