Sobes.tech
Middle

FE bifurcat bifurcat bifurcat bifurcat bifurcat bifurcat ```JavaScript console.log('Timeout'); // 4 }, 0); let p = new Promise(function(resolve, reject) { console.log('Crearea promisiunii'); // 1 resolve(); }); p.then(function(){ console.log('Procesarea promisiunii'); // 3 }); console.log('Sfârșitul scriptului'); // 2 Caz complicat console.log(1); setTimeout(() => console.log(2)); Promise.resolve().then(() => console.log(3)); Promise.resolve().then(() => setTimeout(() => console.log(4))); Promise.resolve().then(() => console.log(5)); setTimeout(() => console.log(6)); console.log(7);

sobes.tech AI

Răspuns de la AI

Разберём порядок вывода в данном коде JavaScript, учитывая особенности event loop, микротасков (Promises) и макротасков (setTimeout).

Код:

console.log(1);

setTimeout(() => console.log(2));

Promise.resolve().then(() => console.log(3));

Promise.resolve().then(() => setTimeout(() => console.log(4)));

Promise.resolve().then(() => console.log(5));

setTimeout(() => console.log(6));

console.log(7);

Пояснение:

  • Сначала выполняется весь синхронный код:

    • console.log(1) -> выводит 1
    • console.log(7) -> выводит 7
  • Затем выполняются микротаски (Promise.then):

    • console.log(3)
    • setTimeout(() => console.log(4)) — это макротаск, добавленный в очередь таймаутов
    • console.log(5)
  • После микротасков выполняются макротаски (setTimeout):

    • console.log(2)
    • console.log(6)
    • console.log(4) (из setTimeout внутри Promise.then)

Итоговый порядок вывода:

1
7
3
5
2
6
4

Это демонстрирует, что микротаски (Promises) выполняются сразу после синхронного кода и до макротасков (setTimeout), а setTimeout внутри микротаска добавляется в очередь макротасков и выполняется позже.