我正在制作一些使用indexdDB的原型应用程序,但我不知道如何创建可重用的函数。
例如,我想创建可重用的函数来检索LOV值。我知道应该通过事件以某种方式创建它,但是我不知道该如何做。
谁能帮忙吗?

以下是我想带入生活的代码

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
        };
    };
};

最佳答案

您的return语句从回调函数REQUEST.onsuccess返回。您没有从getLovValuesByType返回任何内容,这就是为什么lovValues未定义的原因。

最直接的解决方案是使用回调函数:

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);
        };
    };
};


更一般而言,您可能需要阅读一些有关异步JavaScript的内容。

关于javascript - indexedDB可重用功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22053419/

10-10 00:03