Рассмотрим сценарий, в котором у вас есть массив значений (например, myArray) и вам нужно выполнить промис: основанную на функции (например, myPromise) последовательно, передавая каждый элемент массива в качестве параметра. Как реализовать «цикл с возможностью паузы», который гарантирует, что обещания выполняются в правильном порядке?
Чтобы добиться последовательного выполнения, вы можете использовать комбинацию цепочек обещаний и итерационная обработка. Вот фрагмент кода, демонстрирующий, как это можно сделать:
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
Этот подход использует метод сокращения для перебора массива и создания серии связанных обещаний. Каждое обещание выполняется после завершения предыдущего обещания, эффективно обеспечивая желаемую последовательность выполнения.
Если у вас есть поддержка асинхронных функций, доступно более чистое решение с использованием forEachSeries function:
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
Эта функция перебирает массив и делает паузу на каждом элементе, ожидая разрешения обещания, прежде чем перейти к следующей итерации.
Если вам нужно собрать возвращаемые значения обещаний в массив, вы можете изменить функцию forEachSeries как следует:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
Эта функция перебирает массив, накапливает результаты обещаний в массиве результатов и, наконец, возвращает собранные результаты.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3