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
        };
    };
};
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top