J'ai besoin de récupérer plusieurs valeurs d'un IndexedDB, de vérifier si elles remplissent toutes une contrainte (différente pour chacune d'entre elles) et, si c'est le cas, d'appeler une fonction. Pour illustrer cela mieux imaginer que les appels à IndexedDB étaient sychronous, nous aurions quelque chose comme.Vérifier plusieurs valeurs extraites de manière inductive du DB indexé
function myFunc(varNames, conditions) {
for(var i = 0; i < varNames.length; i++) {
if(!isGood(db.get(varNames[i]), conditions[i])) {
return;
}
}
doStuff();
}
Comme IndexedDB est asynchrone, je ne sais pas comment le faire. L'utilisation d'un callback dans chaque get n'est pas vraiment faisable puisque l'appel à doStuff
dépend de tous les get. Accumuler les résultats dans une variable globale ne fonctionnerait pas non plus parce que myFunc
est appelé plus d'un. J'ai essayé quelque chose comme:
function myFunc(varNames, conditions) {
var valid = 0;
checker() {
valid++;
if(valid == varNames.length) {
doStuff();
}
}
for(var i = 0; i < varNames.length; i++) {
db.get(varNames[i], function(val) {
if(isGood(val, conditions[i]) {
checker();
}
});
}
}
Mais cela ne semble pas fonctionner non plus. Des idées?
Voir (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an- [Comment retourner la réponse d'un appel AJAX?] ajax-call) pour des idées. tl; dr: Utilise les promesses. –
Vos déclarations de fonction doivent être préfixées avec 'function', sinon vous obtiendrez une erreur de syntaxe. – levi