Код Middle Кеш и очереди обновлено

Очередь задач с ретраями и dead letter

Условие

Напиши async processJobs(jobs, handler, { concurrency, maxAttempts }). jobs: массив { id, data }. Одновременно выполняется не больше concurrency вызовов handler(data, attempt). Упавшая задача повторяется (попытка +1), пока число попыток не достигнет maxAttempts; после этого она попадает в dead letter.

Вернуть { done: [id...], dead: [{ id, error }] }, где done и dead отсортированы по id по возрастанию, а error это сообщение последней ошибки.

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

  • всё успешно

  • ретрай до успеха

  • исчерпал попытки: dead letter с последней ошибкой

  • concurrency соблюдается

  • пустой список

  • maxAttempts = 1: без повторов

Как подойти

Подсказки: 2
  1. Общая очередь и N воркеров, как в mapLimit.
  2. Упавшую задачу клади в конец очереди с attempt + 1.

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

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