Главная СберБанк Онлайн ждёт три запроса: карты, вклады и предложения. Экран показываем, когда пришли все, а при первой ошибке — заглушку.
Напишите promiseAll(items) без Promise.all, Promise.allSettled и Promise.any. Элементы массива — промисы или обычные значения. Результат — массив в порядке входа, а не в порядке ответов. При первом отказе промис отклоняется этой ошибкой. Для пустого массива — сразу [].
В работе: Параллельная загрузка данных экрана, предзагрузка картинок, пачка запросов к API.
Пример 1: порядок входа, а не ответов
Аргументы теста
[[300, "карты", true], [100, "вклады", true], [200, "предложения", true]]
Ожидается
{"at": 300, "ok": true, "value": ["карты", "вклады", "предложения"]}Пример 2: первый отказ
Аргументы теста
[[300, "карты", true], [100, "таймаут", false]]
Ожидается
{"at": 100, "ok": false, "error": "таймаут"}
Как проверяем
Объявите
promiseAll — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function promiseAll(items) // → Promise<Array>
Источник: Сбер, фронтенд: live coding на JS уровня easy/medium. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.