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

5. Первый успешный склад в Яндекс Маркете

Средняя

Карточка товара в Яндекс Маркете спрашивает срок доставки у трёх складов: Москва, Санкт-Петербург, Екатеринбург. Показываем первый успешный ответ, отказы складов пропускаем.

Напишите promiseAny(items) без Promise.any. Промис разрешается первым успешным значением. Если отказали все — отклоняется AggregateError, где errors — ошибки в порядке входа. Для пустого массива — сразу AggregateError с пустым errors.

В работе: Запрос к нескольким зеркалам CDN, резервные API, выбор ближайшего сервера.

Пример 1: отказ раньше успеха

Аргументы теста
[[50, "msk", false], [200, "spb", true], [120, "ekb", true]]
Ожидается
{"at": 120, "ok": true, "value": "ekb"}

Пример 2: все отказали

Аргументы теста
[[100, "msk", false], [50, "spb", false]]
Ожидается
{"at": 100, "ok": false, "name": "AggregateError", "errors": ["msk", "spb"]}
Как проверяем Объявите promiseAny — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 6: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function promiseAny(items) // → Promise
промисыошибки

Источник: на задачах Яндекс Маркета: срок доставки со складов. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.