@asdasdqwe

Почему такая очередь задач?

Promise.resolve().then(()=>{
  setTimeout(()=>{
    console.log('11111')
  },0)
})

setTimeout(()=>{
    console.log('22222222')    
},0)


Результат: 22222222, 11111

Сначало выполняется then у промиса и добавляет первый setTimeout в очередь, потом второй setTimeout добавляется в очередь. По правилу первым пришел – первым ушел, первый setTimeout должен был запуститься первым, но в данном случае второй setTimeout выполняется сразу
  • Вопрос задан
  • 118 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. Срабатывает then и добавляет в очередь микрозадач свой каллбэк.
2. Срабатывает setTimeout (22222222) и добавляет в очередь макрозадач свой каллбэк.
3. Основной стек пуст, вызывается задача из очереди микрозадач.
4. Срабатывает setTimeout (11111) и добавляет в очередь макрозадач свой каллбэк.
5. Основной стек пуст, очередь микрозадач пуста, вызывается задача из очереди макрозадач.
6. Выводится '22222222'.
7. Основной стек пуст, очередь микрозадач пуста, вызывается задача из очереди макрозадач.
8. Выводится '11111'.
9. Основной стек пуст, очередь микрозадач пуста, очередь макрозадач пуста.
Ответ написан
dollar
@dollar
Делай добро и бросай его в воду.
Попадает очередь в порядке вызова setTimeout, а не в порядке компиляции.
Сначала вызывается timeout2, лишь потом срабатывает then и timeout1 вместе с ним.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы