Я запускаю код ниже. Вывод, который я ожидал, был:
Start -> End -> While expires -> joke -> setTimeout< /code>
Однако вывод, который я на самом деле получаю:
Start -> End -> While expires -> setTimeout -> joke< /code>
Почему это происходит?
не должно быть напечатано «шутка» до «SetTimeout», поскольку обратные вызовы хранятся в очереди микротаски, которая имеет более высокий приоритет, чем очередь задач, где хранятся обратные вызовы SetTimeout?console.log("Start");
setTimeout(function cb() {
console.log("setTimeout");
}, 5000);
const apiUrl = "https://api.chucknorris.io/jokes/random";
fetch(apiUrl)
.then((response) => response.json())
.then((data) => {
const joke = data.value;
console.log(joke);
})
.catch((error) => {
console.error("Error:", error);
});
console.log("End");
let startDate = new Date().getTime();
let endDate = startDate;
while (endDate < startDate + 10000) {
endDate = new Date().getTime();
}
console.log("While expires");
Подробнее здесь: https://stackoverflow.com/questions/797 ... k-priority