Что выведет код Middle Промисы и async/await обновлено
race не отменяет проигравших
Вопрос
Что выведет код? По строке на каждый вывод.
const wait = (ms, v) =>
new Promise((resolve) =>
setTimeout(() => {
console.log('готов ' + v);
resolve(v);
}, ms));
(async () => {
const r = await Promise.race([wait(30, 'медленный'), wait(10, 'быстрый')]);
console.log('race: ' + r);
})();
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: готов быстрый, race: быстрый, готов медленный. race выполняется первым завершившимся промисом: через 10 мс печатается готов быстрый, и сразу после этого (микрозадачей) продолжается async-функция: race: быстрый.
Что выведет
готов быстрый
race: быстрый
готов медленный
Разбор
race выполняется первым завершившимся промисом: через 10 мс печатается готов быстрый, и сразу после этого (микрозадачей) продолжается async-функция: race: быстрый. Медленная операция не отменяется: промисы не умеют отменяться, и через 30 мс её таймер всё равно срабатывает и печатает готов медленный.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
all, allSettled и any на одних данных
Следующий вопрос
Повторные resolve, reject и throw