Войти Регистрация
Фронтенд

49. Манифест видео VK с самого быстрого зеркала

Лёгкая

Плеер 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
промисыPromise.race

Источник: на задачах VK Видео: загрузка манифеста ролика. Условие пересказано своими словами.