Плеер VK Видео запрашивает манифест ролика сразу с двух-трёх зеркал CDN. Одно отвечает за 80 мс, другое за 400 мс, третье иногда возвращает ошибку за 30 мс.
Напишите promiseRace(items) без Promise.race. Результат — промис, который завершается так же, как первый завершившийся элемент: значением или ошибкой. Остальные ответы игнорируются.
Элемент массива может быть обычным значением, а не промисом — тогда он считается готовым сразу. Для пустого массива промис не завершается никогда, как у встроенного Promise.race.
В работе: Три зеркала CDN отдают манифест ролика: плеер берёт того, кто ответил первым, даже если первым пришёл отказ за 30 мс.
Пример 1: первым ответило быстрое зеркало
[["ok", 400, "edge-msk-2"], ["ok", 80, "edge-msk-1"]]
["ok", "edge-msk-1", 80]
Пример 2: первой пришла ошибка
[["ok", 80, "edge-msk-1"], ["err", 30, "502 от edge-spb"]]
["err", "502 от edge-spb", 30]
promiseRace — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function promiseRace(items) // → Promise
Источник: на задачах VK Видео: загрузка манифеста ролика. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.