async func(){ try{ let iter=[1,2,3] for (i of iter){ let result=await someFunc() pool.query("some query",arrWithResult) } }catch(err){console.log(err)} }Aquí, el ciclo espera await. Pero no quiero eso. Necesito que el resultado y la consulta sql se ejecuten en secuencia, pero el ciclo debe continuar sin esperar. También necesito el valor de i actual al ejecutar la consulta. De lo contrario, simplemente insertaría estas promesas en la matriz y haría Promise.all (arr)
async func(){ try{ let iter=[1,2,3] for (i of iter){ someFunc().then(body=>{pool.query("some query",arrWithResult).catch(err=>err) } }catch(err){console.log(err)} }¿Esta bien? También pensé en hacer que la parte fuera asíncrona, pero ¿debería agregar otro bloque de captura de prueba?
Entonces, ¿cuál es la mejor manera para esto? O debo ir por entonces/atrapar. Al hacer Promise.all, el valor de iter se pierde.
Tal vez no lo estoy pensando (o usted lo está pensando demasiado), pero ¿por qué no simplemente refactorizaría en otra función asíncrona que haga lo que debe hacerse en cada iteración del ciclo, y luego Promise.all() la lista de promesas devueltas para dejar que se resuelvan?
Algo como esto:
async func f1() { const iter = [ 1, 2, 3 ] ; return await Promise.all( iter.map(f2) ); } async func f2(i) { const result = await someFunc() ; return await pool.query( "some query" , arrWithResult ); }La persona que llama solo necesita decir...
const responses = await f1(); ```No use un iterador var para esto; este es un trabajo para Array.map()
Promise.all([1,2,3].map(i => someFunc().then(body => pool.query("some query",arrWithResult).catch(err=>err));