Обещать

С момента создания Promise мы больше не страдаем от ада обратных вызовов. Это также делает асинхронные коды более предсказуемыми и управляемыми. В то же время у нас есть более мощный Fetch API для получения ресурсов вместо устаревшего XMLHttpRequest.
Тем не менее, все еще существуют ограничения на подключение браузера, максимальное количество запросов, которые могут быть отправлены одновременно в большинстве современных браузеров, равно 6.

А что, если мы хотим контролировать его более точно?
Давайте используем эту мок-функцию как поддельный вызов API.

Игнорировать последовательность

Прежде всего, как мы можем убедиться, что все запросы выполнены, прежде чем мы перейдем к следующему?
Да, интуитивно понятно, что мы можем использовать Promise.all для достижения цели.

Результат будет таким

Мы заметим, что это не гарантирует последовательность, и если это большое количество запросов, этот подход может заблокировать сетевое соединение.

Улучшение

В дополнение к вышеперечисленным рискам, когда мы делаем веб-сканеры или роботов, нам также нужно беспокоиться о том, что большое количество одновременных запросов приведет к тому, что вы будете забанены.

Давайте подумаем, как заставить это работать так, даже на 1000 запросов.

1. Массив.уменьшить✅

Массив.для каждого❌

Причина, по которой мы не используем Array.map или Array.forEach, заключается в том, что мы не можем соединить цепочку со следующим элементом.
Возможно, вы рассмотрите возможность повторения элементов с помощью асинхронногообратного вызова.

На самом деле этот подход НЕ работает, потому что Array.forEach не заботится о том, является ли ваша функция обратного вызова асинхронной функцией (Promise) или нет, и будет игнорировать состояние разрешено (отклонено) или нет.

Но вместо этого мы можем использовать цикл for.

2. Цикл for с async/await✅

Конечно, этот метод является наиболее интуитивным, потому что именно поэтому был создан async/await.
Если вы не участвуете в собеседовании и вас просят использовать только Promise, я предпочту этот подход.

3. Рекурсия✅

Этот метод также очень прост и требует небольшого пояснения. Он сочетает в себе рекурсию и синтаксис распространения ES6, его легко понять.
Однако я думаю, что это будет больше похоже на решение для интервью, поскольку второе легче понять.

В этой статье представлены некоторые методы создания цепочки промисов, надеюсь, вы вдохновитесь ими и не стесняйтесь оставлять свои комментарии.

Спасибо за прочтение.