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?
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.
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.
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.
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