Выбор ответа Middle Промисы и async/await обновлено
Что с остальными запросами при ошибке в Promise.all
Вопрос
В Promise.all передали три запроса fetch. Второй упал через 100 мс. Что происходит с первым и третьим?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Они продолжат выполняться, но Promise.all их результаты не вернёт. Promise.all отклоняется сразу при первой ошибке, но остальные операции об этом ничего не знают: промисы не умеют отменяться, запросы дойдут до конца, их результаты будут проигнорированы.
Варианты ответа
- Они автоматически отменяются:
Promise.allпрерывает ихfetch - Они продолжат выполняться, но
Promise.allих результаты не вернётправильный ответ Promise.allждёт их завершения и только потом отклоняется- Они перезапускаются, чтобы
Promise.allсмог собрать все три ответа
Разбор
Promise.all отклоняется сразу при первой ошибке, но остальные операции об этом ничего не знают: промисы не умеют отменяться, запросы дойдут до конца, их результаты будут проигнорированы. Чтобы реально прервать запросы, передают общий AbortController.signal и вызывают abort() в catch. Ждёт всех Promise.allSettled. Перезапуска нет ни у одного из комбинаторов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.