ho il seguente codice:chiama una funzione asincrona all'interno di un ciclo for in JavaScript
for(var i = 0; i < list.length; i++){
mc_cli.get(list[i], function(err, response) {
do_something(i);
});
}
mc_cli
è una connessione ad un database memcached. Come potete immaginare, la funzione di callback è asincrona, quindi può essere eseguita quando il ciclo for è già terminato. Inoltre, quando si chiama in questo modo do_something(i)
utilizza sempre l'ultimo valore del ciclo for.
ho provato con una chiusura in questo modo
do_something((function(x){return x})(i))
ma pare che questo è di nuovo utilizzando sempre l'ultimo valore dell'indice del ciclo for.
Ho provato anche dichiarare una funzione prima che il ciclo for in questo modo:
var create_closure = function(i) {
return function() {
return i;
}
}
e quindi chiamando
do_something(create_closure(i)())
ma ancora una volta senza successo, con il valore di ritorno di essere sempre l'ultimo valore della per ciclo.
Qualcuno può dirmi cosa sto sbagliando con chiusure? Pensavo di averli compresi ma non riesco a capire perché non funzioni.
sacco di grazie amico! questo codice mi ha salvato !!! : D – DDave
@ joseph il tuo ragionamento suona alla grande. Puoi spiegare questa parte di me per favore "Iterazione avrà il suo scopo"? –