Bonjour à tous,
Je suis nouveau sur ce forum, bien que je le consulte régulièrement (regorgeant d'informations très utiles). Aujourd'hui, j'ai grand besoin de votre aide car je bute sur un problème qui me parait simple mais dont je n'arrive pas à trouver la solution :
Voici le code ( simplifié ) :
Dans le code ci-dessus, je déclare tout d'abord une variable "n" que je souhaite incrémenter pour chaque résultat d'une requête SQLite. Etant déclarée à l'extérieur de dataHandler(), cette fonction y a donc accès, l'incrémentation se fait bien en mode debug mais à la sortie de la fonction, n = 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 db.transaction( function( transaction ) { var n = 0; var dataHandler = function( transaction, result ) { for( var i = 0; i < result.rows.length; i++ ) { n++; // n est bien incrémenté } }; transaction.executeSql( "select ...", [], dataHandler, errorHandler ); alert( n ); // affiche 0 });
Si quelqu'un saurait me dire où est mon erreur. Merci (testé sous Safari / Chrome)
[edit]
Bon, j'ai un peu avancé: en ajoutant un alert() à la fin du dataHandler :
Dans l'ordre, j'ai un alert( 0 ) suivi d'un alert( 5 ) ce qui me laisse penser que la fonction dataHandler est exécutée à la fin de la transaction, ce qui finalement semble logique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 db.transaction( function( transaction ) { var n = 0; var dataHandler = function( transaction, result ) { for( var i = 0; i < result.rows.length; i++ ) { n++; // n est bien incrémenté } alert( n ); // affiche 5 }; transaction.executeSql( "select ...", [], dataHandler, errorHandler ); alert( n ); // affiche 0 });
Partager