Могу ли я считать, что я понял event loop, исходя из данного примера?

Какой тип задач порождают выполнения в цепочке `Promise.resolve().then(setTimeout(() => test(4) /* MS1 */, 1000) /* MC5 */);`? Что произойдет после завершения этой цепочки выполнения?
  • 13 февраля 2024 г. 20:58
Ответы на вопрос 2
Исходя из данного примера, можно сделать некоторые выводы о принципе работы event loop, но для полного понимания этой концепции может потребоваться изучение других аспектов и примеров.

В данной цепочке выполнения присутствует вызов `Promise.resolve()`, который создает и возвращает уже выполненный промис. Затем, при помощи метода `then`, у этого промиса определяется колбэк, внутри которого выполняется функция `setTimeout`. Время ожидания перед вызовом этого колбэка составляет 1000 мс.

Таким образом, тип задачи, порождаемой этой цепочкой, можно считать макрозадачей (Microtask/Macrotask). Исходя из общей логики работы event loop, такая задача будет помещена в очередь макрозадач.

После завершения этой цепочки выполнения и выполнения функции `setTimeout`, макрозадача будет помещена в очередь событий (setTimeout/MacroTask Queue). Затем, после того как стек вызовов станет пустым, event loop заберет макрозадачу из очереди событий и поместит ее в стек вызовов для выполнения.
Я думаю вы слишком усложнили понимание event loop. 
Это лишь механизм для управления асинхронным кодом.
Позволяющий отслеживать готовность выполнения кода.

Вот простой пример:


Как только функция delay завершит выполнение, она вернет промис с результатом.

Удобство event loop в том, что бы понимать когда код будет закончен, для ваших последующих действий.

С тем какая именно будет логика выполнения вашего кода, ничего общего event loop не имеет.
Похожие вопросы