Экран кешбэка Альфа-Банка собирает категории от трёх партнёрских сервисов. Если один не ответил, остальные категории всё равно показываем.
Напишите promiseAllSettled(items) без встроенного Promise.allSettled. Результат — массив в порядке входа: {status: 'fulfilled', value} или {status: 'rejected', reason}. Элементы — промисы или обычные значения.
В работе: Экран из независимых блоков, пакетная отправка, проверка нескольких зеркал API.
Пример 1: успех и отказ
Аргументы теста
[[200, "АЗС 5%", true], [100, "партнёр недоступен", false], [50, "Кафе 10%", true]]
Ожидается
{"at": 200, "ok": true, "value": [["ok", "АЗС 5%"], ["rejected", "партнёр недоступен"], ["ok", "Кафе 10%"]]}Пример 2: все отказы
Аргументы теста
[[30, "a", false], [10, "b", false]]
Ожидается
{"at": 30, "ok": true, "value": [["rejected", "a"], ["rejected", "b"]]}
Как проверяем
Объявите
promiseAllSettled — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 5: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function promiseAllSettled(items) // → Promise<Array<{status, value?, reason?}>>
Источник: на задачах Альфа-Банка: категории кешбэка. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.