Итак, я изучал событие l oop и очереди микро / макро задач за последний день. И я видел прямые противоречия со стороны нескольких людей по поводу следующего кода:
setTimeout(() => console.log("A"), 0);
const futureData = fetch('someUrl') // assume this takes 300ms
futureData.then(x => console.log("B"))
console.log("C")
// output -> C, A, B
// what multiple JS instructors says the output will be -> C, B, A
Фактический результат, который я получаю, написан выше. Однако в курсе, который я беру, инструкторы утверждают, что, поскольку futureData
является обещанием, оно помещается в очередь микрозадач, а поскольку оно помещается в очередь микрозадач, оно будет выполнено первым перед любым макро-задачи, такие как setTimeout.
Но после запуска это буквально ложь? Что-то мне здесь не хватает? Почему квалифицированные инструкторы говорят это? Я почти уверен, что упускаю важную информацию.
Я считаю, что только решенные обещания будут помещены в очередь микрозадач, в то время как все ожидающие выполнения обещания должны будут ждать до будущего события l oop раундов.
Что мне не хватает?