Обещать
С момента создания 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, его легко понять.
Однако я думаю, что это будет больше похоже на решение для интервью, поскольку второе легче понять.
В этой статье представлены некоторые методы создания цепочки промисов, надеюсь, вы вдохновитесь ими и не стесняйтесь оставлять свои комментарии.
Спасибо за прочтение.