Карточка товара в Яндекс Маркете спрашивает срок доставки у трёх складов: Москва, Санкт-Петербург, Екатеринбург. Показываем первый успешный ответ, отказы складов пропускаем.
Напишите 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
Источник: на задачах Яндекс Маркета: срок доставки со складов. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.