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

3. Свой Promise.all для главной СберБанк Онлайн

Средняя

Главная СберБанк Онлайн ждёт три запроса: карты, вклады и предложения. Экран показываем, когда пришли все, а при первой ошибке — заглушку.

Напишите 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. Условие пересказано своими словами.

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