"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo secuenciar la ejecución de la promesa con el paso de parámetros desde una matriz?

¿Cómo secuenciar la ejecución de la promesa con el paso de parámetros desde una matriz?

Publicado el 2024-11-18
Navegar:882

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

Ejecución secuencial de promesas con paso de parámetros desde una matriz

Considere el escenario en el que tiene una matriz de valores (por ejemplo, myArray) y necesita ejecutar una promesa. función basada (por ejemplo, myPromise) secuencialmente, pasando cada elemento de la matriz como parámetro. ¿Cómo se puede implementar un "bucle pausable" que garantice que las promesas se resuelvan en el orden correcto?

Solución: ejecución iterativa de promesas

Para lograr una ejecución secuencial, puede utilizar una combinación de encadenamiento de promesas y procesamiento iterativo. Aquí hay un fragmento de código que demuestra cómo se puede hacer esto:

myArray.reduce(
  (p, x) =>
    p.then(() => myPromise(x)),
  Promise.resolve()
)

Este enfoque aprovecha el método de reducción para iterar sobre la matriz y crear una serie de promesas encadenadas. Cada promesa se resuelve una vez completada la promesa anterior, lo que aplica de manera efectiva la secuencia de ejecución deseada.

Alternativa de función asincrónica

Si admite funciones asincrónicas, hay disponible una solución más limpia usando forEachSeries función:

const forEachSeries = async (iterable, action) => {
  for (const x of iterable) {
    await action(x)
  }
}

forEachSeries(myArray, myPromise)

Esta función itera sobre la matriz y se detiene en cada elemento, esperando que se resuelva la promesa antes de continuar con la siguiente iteración.

Recopilación de resultados

Si necesita recopilar los valores de retorno de las promesas en una matriz, puede modificar la función forEachSeries de la siguiente manera:

const mapSeries = async (iterable, fn) => {
  const results = []

  for (const x of iterable) {
    results.push(await fn(x))
  }

  return results
}

Esta función itera sobre la matriz, acumula los resultados de las promesas en la matriz de resultados y finalmente devuelve los resultados recopilados.

Declaración de liberación Este artículo se reimprime en: 1729407377 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3