Webkit executesql problème de phrase et de boucle

J'essaie d'utiliser la variable de boucle dans la fonction executeSql qui contient une boucle. Mais la variable de boucle obtient la dernière valeur si je n'utilise pas une fermeture. Quand j'utilise une fermeture, je n'obtiens pas la liste des résultats de la fonction executeSql. Exemples:

for (var i = 0; i < count; i++) { tx.executeSql('SELECT AColumn FROM ATable WHERE refID=' + i, [], function(tx,results) //success function { //do something } ,errorfunction); } 

Dans la fonction de succès, «i» est toujours «count + 1».

Pour résoudre cela, j'ai changé mon code comme ceci:

 for (var i = 0; i < count; i++) { tx.executeSql('SELECT AColumn FROM ATable WHERE refID=' + i, [], (function(tx,results) //success function { //do something })(i) ,errorfunction); } 

Avec cela, j'ai le droit «i». Mais les "résultats" sont indéfinis.

J'ai essayé de passer "tx" et "i" comme ceci:

  (function(tx,results) //success function { //do something })(tx,null,i) 

Avec cela, je comprends pourquoi je "nets" les résultats. Je veux apprendre comment puis-je obtenir les bons résultats de executeSql.

Vous recherchez ce qui suit:

 for (var i = 0; i < count; i++) { tx.executeSql('SELECT AColumn FROM ATable WHERE refID=' + i, [], (function(i){ return function(tx,results) //success function { //do something }; })(i), errorfunction); } 

À la fin de la journée, vous devez passer une fonction de la fonction de signature function(tx,res) qui est clairement ce que l'ensemble (function(i){ return function(tx,res){ ... }; })(i) Fait, puisque la fonction anonyme externe s'exécute immédiatement et renvoie une fonction de cette signature.

La valeur i dans cette fonction interne a la valeur de i lorsque la fonction externe a été appelée (c'est-à-dire la valeur de chaque itération), puisque la valeur i est passée par valeur dans la fonction anonyme externe, donc les références à i dans la fonction interne renvoyée Va se résoudre correctement.