Внутри nodejs «event l oop» есть несколько разных очередей для вещей, ожидающих запуска. Есть очередь для асинхронных операций ввода-вывода, таких как файловые операции. Для таймеров есть отдельный шаг события l oop (на самом деле это не очередь, поскольку таймеры реализованы в событии l oop очень специфическим c способом). Для обещаний есть очередь микрозадач. Поскольку событие l oop ищет следующее действие, оно имеет определенный c порядок, в котором он ищет вещи, и некоторые вещи (например, разрешенные / отклоненные обещания) имеют более высокий приоритет, чем другие вещи, ожидающие выполнения.
c, webapi используется как гигантский заполнитель для всех вещей, которые браузер добавляет в свою среду Javascript, но не встроенных в сам язык Javascript. Это может включать Ajax, DOM и т.д. c ... Действительно, существует несколько очередей, которые являются частью того, что браузер добавляет к ванильной реализации Javascript.
В спецификации ECMAScript используются термины Задания и очереди заданий . Microtask часто используется в отношении обещаний и их реализации, на которые вы можете ссылаться здесь, на MDN , но он используется, чтобы просто попытаться объяснить, как работает спецификация или реализация - этого термина на самом деле нет в спецификация.
В общем, термин микрозадача используется для описания подмножества некоторой более крупной задачи, ожидающей выполнения. Например, если у вас было что-то вроде этого (где $.get()
- это вызов ajax:
$.get("http://www.google.com").then(result => {
console.log("got the page");
}).catch(err => {
console.log(err);
});
Тогда браузер запустит $.get()
, а когда-нибудь позже, когда он завершится, и JS engine бесплатен, будет вызван обратный вызов, который разрешит обещание, которое возвращает $.get()
. Разрешение этого обещания позволит обещанию запланировать выполнение его .then()
обработчиков. Они планируются, вставляя их в очередь микрозадач обещания. И, когда текущий бит Javascript завершается и возвращается к событию l oop, событие l oop запускает первое, что происходит в этой очереди микрозадач, и оно запускает его до того, как оно выполнит большинство других вещей в других очереди, которые также обслуживаются событием l oop.