Код Senior Офлайн и хранение спрашивают часто обновлено
Очередь офлайн-запросов
Условие
Напишите flushQueue(queue, send): асинхронно отправляет операции очереди по порядку через send(op) (возвращает промис) и возвращает объект { sent, failed, remaining }:
- успех: операция попадает в
sent(еёid); - ошибка с
err.retryable === true(сетевая): остановиться, эта и все последующие операции остаются вremaining(массив операций в исходном порядке); - другая ошибка (например, валидация): операция попадает в
failed(еёid), отправка продолжается.
Исходный массив не менять.
Что проверяют тесты
все успешно
пустая очередь
строгий порядок отправки
сетевая ошибка останавливает
ошибка валидации не останавливает
смешанные ошибки
исходный массив не меняется
retryable: false считается валидацией
Как подойти
Подсказки: 2
- Обычный
forсawaitвнутри гарантирует последовательную отправку. - При сетевой ошибке верните
queue.slice(i).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.