fonction réutilisable indexedDB
-
21-12-2019 - |
Question
Je crée un prototype d'application qui utilise indexdDB et je n'arrive pas à comprendre comment créer une fonction réutilisable.Par exemple, je voudrais créer une fonction réutilisable pour récupérer les valeurs LOV.Je sais que cela devrait être créé d'une manière ou d'une autre via des événements mais je n'arrive pas à comprendre comment.Quelqu'un pourrait-il m'aider s'il vous plaît ?
Ci-dessous le code que j'aimerais donner vie
function parent(){
var lovValues = getLovValuesByType("STORE_TYPE");
//lovType now is undefined
};
function getLovValuesByType(lovType){
var returnedLovValues = new Array();
var t = db.transaction(["LST_OF_VAL"], "readonly");
var objectStore = t.objectStore("LST_OF_VAL");
var INDEX = objectStore.index("TYPE");
var REQUEST = INDEX.openCursor(IDBKeyRange.only(lovType));
REQUEST.onsuccess = function() {
var CURSOR = REQUEST.result;
if (CURSOR) {
var value = this.result.value.VAL;
returnedLovValues.push(value);
this.result.continue();
} else {
return returnedLovValues; /// <------return data
};
};
};
La solution
Ton return
l'instruction revient de la fonction de rappel REQUEST.onsuccess
.Tu ne rends rien de getLovValuesByType
, c'est pourquoi lovValues
est indéfini.
La solution la plus simple consiste à utiliser une fonction de rappel :
getLovValuesByType("STORE_TYPE", function (lovValues) {
//lovType now is defined
);
function getLovValuesByType(lovTypem, cb){
var returnedLovValues = new Array();
var t = db.transaction(["LST_OF_VAL"], "readonly");
var objectStore = t.objectStore("LST_OF_VAL");
var INDEX = objectStore.index("TYPE");
var REQUEST = INDEX.openCursor(IDBKeyRange.only(lovType));
REQUEST.onsuccess = function() {
var CURSOR = REQUEST.result;
if (CURSOR) {
var value = this.result.value.VAL;
returnedLovValues.push(value);
this.result.continue();
} else {
cb(returnedLovValues);
};
};
};
Plus généralement, vous souhaiterez peut-être lire quelques informations sur le JavaScript asynchrone.