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

50. Шаги переноса номера в МТС строго по очереди

Лёгкая

Перенос номера в МТС из другого оператора идёт в четыре шага: проверка паспорта, бронь даты переноса, подписание заявления по SMS-коду, отправка заявки в базу переносов. Каждый шаг — запрос к своему сервису, и следующий нельзя начинать, пока не закончился предыдущий.

Напишите sequence(tasks). tasks — массив функций без аргументов, каждая возвращает промис. Функции вызываются по одной: следующая — только после того, как промис предыдущей выполнился.

Результат — промис массива ответов в порядке шагов. Если шаг отказал, sequence отказывает с той же ошибкой, а оставшиеся шаги не вызываются. Пустой массив даёт [].

В работе: Заявление на перенос нельзя подписывать, пока сервис броней не подтвердил дату: из 4 шагов каждый ждёт предыдущий.

Пример 1: четыре шага подряд

Аргументы теста
[[300, "паспорт ок"], [200, "бронь 25.10"], [100, "подписано"], [400, "заявка 77-0193"]]
Ожидается
{"out": ["ok", ["паспорт ок", "бронь 25.10", "подписано", "заявка 77-0193"]], "started": [[0, 0], [1, 300], [2, 500], [3, 600]], "end": "done"}

Пример 2: пустой список

Аргументы теста
[]
Ожидается
{"out": ["ok", []], "started": [], "end": "done"}
Как проверяем Объявите sequence — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 6: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function sequence(tasks) // → Promise<Array>
промисыasync/awaitпоследовательное выполнение

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