«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как упорядочить выполнение обещаний с передачей параметров из массива?

Как упорядочить выполнение обещаний с передачей параметров из массива?

Опубликовано 18 ноября 2024 г.
Просматривать:152

How to Sequence Promise Execution with Parameter Passing from an Array?

Последовательное выполнение промисов с передачей параметров из массива

Рассмотрим сценарий, в котором у вас есть массив значений (например, 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
}

Эта функция перебирает массив, накапливает результаты обещаний в массиве результатов и, наконец, возвращает собранные результаты.

Заявление о выпуске Эта статья перепечатана по адресу: 1729407377. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3