Collega la query di connessione e posiziona la variabile all’interno della risposta con promise o altro

Sto cercando di posizionare var [i] (scoreAvis [i] all’interno della risposta per creare un’altra query SQL ma il console.log dice indefinito o mi dà l’ultimo risultato della mia var [i]

obj assomiglia a questo:

var scoreAvis = [ { "caracname": "carac1", "score": 4 }, { "caracname": "carac2", "score": 5 }, { "caracname": "carac3", "score": 3 } ] 

 for (i = 0; i  0){ connection.query("SELECT AVG(" + scoreAvis[i].caracname + ") FROM avis WHERE products_id=1", function (error, results, fields) { if (!!error) { console.log(error) } else { console.log(scoreAvis[i].caracname + " yes you get the data ! you can do another query connection with it") } }); }; }; 

Dato che hai già un array, probabilmente non dovresti usare un loop con callback che preleva il tuo indice usa e getta dalla chiusura. Nel momento in cui viene richiamato il callback, il valore i è la lunghezza dell’array. Puoi invece usare la map .

 const queryAsPromise = connection => args => new Promise( (resolve,reject)=> connection.query.apply( connection, args.concat([ (error, results, fields) => (!!error) ? reject(error) : resolve([results,fields]) ]) ) ); Promise.all( scoreAvis.filter(av=>av.score>1)//only where score > 1 .map(//map to a promise av=> queryAsPromise( connection )([ //https://github.com/mysqljs/mysql#escaping-query-identifiers `SELECT AVG(${connection.escapeId(av.carcname)}) FROM avis WHERE products_id=1` ]) .then( result=> { console.log( "query result:",result,"from:", av, " yes you get the data ! you can do another query connection with it" ); return result; } ) ) ).then( results=> console.log("Got all results:",results) ).catch( err=>console.error("Something went wrong:",err) );