Я запускаю код ниже. Вывод, который я ожидал, был:
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
Почему SetTimeout выполняется до получения. ⇐ Javascript
Форум по Javascript
-
Anonymous
1757244264
Anonymous
Я запускаю код ниже. Вывод, который я ожидал, был:
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");
Подробнее здесь: [url]https://stackoverflow.com/questions/79758060/why-does-settimeout-execute-before-fetch-then-despite-microtask-priority[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия