Выбор ответа Middle Реализация с нуля обновлено
Реализация Promise.race
Вопрос
Какая реализация Promise.race верная?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: (list) = new Promise((res, rej) = list.forEach((p) = Promise.resolve(p).then(res, rej))). Промис меняет состояние один раз, поэтому достаточно подписать resolve и reject на все элементы: первый завершившийся, успешно или с ошибкой, определит результат, остальные вызовы проигнорируются.
Варианты ответа
(list) => new Promise((res, rej) => list.forEach((p) => Promise.resolve(p).then(res, rej)))правильный ответ(list) => Promise.all(list.map((p) => Promise.resolve(p))).then((values) => values[0])(list) => new Promise((res, rej) => list.forEach((p) => p.then(res)))(list) => new Promise((res, rej) => Promise.resolve(list[0]).then(res, rej))
Разбор
Промис меняет состояние один раз, поэтому достаточно подписать resolve и reject на все элементы: первый завершившийся, успешно или с ошибкой, определит результат, остальные вызовы проигнорируются. Promise.resolve позволяет передавать и не-промисы. Вариант через Promise.all ждёт всех и берёт первый по порядку, а не по времени. Третий не обрабатывает ошибки и падает на не-промисах. Четвёртый просто берёт первый элемент списка, не дожидаясь остальных.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.