Узел JS изменяет выходные данные случайным образом

#javascript #node.js #event-loop

#javascript #node.js #цикл событий

Вопрос:

Окружающая среда: — NodeJS 14.15.0

В следующем коде :-

 const sleep_st = (t) => new Promise((r) => setTimeout(r, t));
const sleep_im = () => new Promise((r) => setImmediate(r));

(async () => {
    setImmediate(() => console.log(1));
    console.log(2);
    

    await sleep_st(0);
    
    setImmediate(() => console.log(3));
    console.log(4);

    await sleep_im();
    setImmediate(() => console.log(5));

    console.log(6);

    await 1;

    setImmediate(() => console.log(7));
    console.log(8);
})();
 

Некоторое время вывод :-
2 1 4 3 6 8 5 7

Но иногда :- 2 4 1 3 6 8 5 7

Комментарии:

1. Это зависит от операционной системы, загрузки процессора и т. Д. Он никогда не будет одинаковым для каждого раза.

2. Каким вы ожидали получить результат и почему?

3. Я ожидал, что это будет 2 1 4 3 6 8 5 7

4. Потому что у меня сложилось впечатление, что этап setImmediate выполняется до фазы таймера