Я уже давно знаком с концепциями Microtasks и Macrotasks, и из всего, что я читал, я всегда считал, что setTimeout
следует рассматривать как создание макрозадачи и Promise.resolve()
(или process.nextTick
на NodeJS) для создания микротоков.
(Да, я знаю, что разные библиотеки Promise, такие как Q и Bluebird, имеют разные реализации планировщиков, но здесь я имею в виду собственные обещания на каждой платформе)
Имея это в виду, я не могу объяснить следующую последовательность событий в NodeJS (результаты в Chrome отличаются от NodeJS (как v8 LTS, так и v10) и соответствуют моему пониманию по этому вопросу).
for (let i = 0; i < 2; i++) {
setTimeout(() => {
console.log("Timeout ", i);
Promise.resolve().then(() => {
console.log("Promise 1 ", i);
}).then(() => {
console.log("Promise 2 ", i);
});
})
}