Как выполнять промисы последовательно

Если вы кодировали с помощью Javascript, скорее всего, вы использовали промисы в своем коде. Это важно для функционального программирования, а Promise.all, который входит в состав ES6, достаточно для запуска параллельных асинхронных задач.
Однако, если вы хотите запускать свои задачи последовательно, вам не повезло с новой библиотекой промисов.

Недавно я столкнулся с вариантом использования, когда мне нужно было последовательно вызывать асинхронные функции, и если какая-либо из них не работает, дальнейшие вызовы не должны выполняться, и вся операция должна завершиться ошибкой. Это можно легко решить с помощью Array.prototype.reduce(). Вот отличный пост от Joel Thoms от Hakernoon.

Однако у меня была небольшая оговорка для моего случая. Асинхронная функция, которую я вызвал, reject() не выполнила обещание. Скорее resolved() со статусом error:'error'. Я знаю, что это немного странный вариант использования, но, поскольку это был кросс-платформенный вызов, вы можете столкнуться с ним. Теперь это сделало использование функции сокращения намного более сложным, потому что вам нужно сломать функцию сокращения между ними, если она соответствует вашим критериям выхода, что, кстати, не поддерживается родным массивом array.prototype.reduce().

Чтобы решить эту проблему, я провел небольшое исследование и в итоге написал два отличных поста. Эти сообщения посвящены выходу из функции сокращения. Один включает использование функции преобразования lodash, а другой помогает вам создать собственную функцию сокращения. По большей части этого должно быть достаточно, чтобы решить вашу проблему. Однако для меня добавление библиотеки lodash было слишком дорого, и в итоге я использовал обходной путь, чтобы выйти из функции сокращения. Теперь займемся кодированием.

использованная литература

  1. Первая от Юлия Пассынкова здесь
  2. А другой от BRYANJENNINGZ здесь
  3. Фото автора Paul Esch-Laurent на Unsplash