Hola, estoy tratando de ejecutar la misma función de forma asíncrona usando diferentes parámetros, pero no puedo averiguar cómo almacenar las funciones sin ejecutarlas antes de la promesa.
Aquí hay un ejemplo simplificado de lo que estoy tratando de hacer:
const myFunc = async(paramsAsArray) => { // does stuff } let paramArray = [ [a,b], [c, d], [e, f] ] let funcArray = [] for (let i = 0; i < paramArray.length; i++) { funcArray.push(myFunc(paramArray[i])) } const response = await Promise.all(funcArray)Mis funciones continúan ejecutándose en el ciclo for antes de que pueda usar la promesa.todo(). ¿Alguien sabe qué puedo hacer para que ejecuten una promesa usando todos? Cualquier ayuda o sugerencia es apreciada, gracias!
myFunc(paramArray[i]) llama a la función inmediatamente. Lo está llamando, por lo que no está empujando la función en sí a la matriz, sino su valor devuelto. Además, la resolución de Promise comienza de inmediato, no en Promise.all .
Para impulsar la función en sí misma sin llamarla, y aún así pasarle parámetros, use .bind :
funcArray.push(myFunc.bind(this, paramArray[i])) También puede construir su matriz usando .map() :
const funcArray = paramArray.map( params => myFunc.bind(this, params));Envuelva su función en otra función para que no se llame de inmediato. luego llámalo dentro Promise.all
funcArray.push(() => myFunc(paramArray[i]))` const response = await Promise.all(funcArray.map(f=> f()))