L'appel d'une fonction asynchrone à l'intérieur d'une boucle en JavaScript

J'ai le code suivant:

for(var i = 0; i < list.length; i++){
    mc_cli.get(list[i], function(err, response) {
        do_something(i);
    });
}

mc_cli est une connexion à une base de données de memcache. Comme vous pouvez l'imaginer, la fonction de rappel est asynchrone, donc c'est peut être exécutée lorsque la boucle for est déjà terminée. Aussi, lors de l'appel de cette façon do_something(i) il utilise toujours la dernière valeur de la boucle for.

J'ai essayé avec une fermeture de cette façon

do_something((function(x){return x})(i)) 

mais apparemment c'est encore une fois en utilisant toujours la dernière valeur de l'indice de la boucle for.

J'ai aussi essayé de la déclaration d'une fonction avant la boucle for comme ceci:

var create_closure = function(i) {
    return function() {
        return i;
    }
}

et puis l'appel de

do_something(create_closure(i)())

mais encore une fois sans succès, avec la valeur de retour d'être toujours la dernière valeur de la boucle for.

Quelqu'un peut-il me dire ce que je fais mal avec les bouchons? J'ai cru comprendre, mais je ne peux pas comprendre pourquoi cela ne fonctionne pas.

InformationsquelleAutor Masiar | 2012-11-12