Код Senior Офлайн и хранение спрашивают часто обновлено

Очередь офлайн-запросов

Условие

Напишите flushQueue(queue, send): асинхронно отправляет операции очереди по порядку через send(op) (возвращает промис) и возвращает объект { sent, failed, remaining }:

  • успех: операция попадает в sent (её id);
  • ошибка с err.retryable === true (сетевая): остановиться, эта и все последующие операции остаются в remaining (массив операций в исходном порядке);
  • другая ошибка (например, валидация): операция попадает в failed (её id), отправка продолжается.

Исходный массив не менять.

Что проверяют тесты

  • все успешно

  • пустая очередь

  • строгий порядок отправки

  • сетевая ошибка останавливает

  • ошибка валидации не останавливает

  • смешанные ошибки

  • исходный массив не меняется

  • retryable: false считается валидацией

Как подойти

Подсказки: 2
  1. Обычный for с await внутри гарантирует последовательную отправку.
  2. При сетевой ошибке верните queue.slice(i).

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.