indexedDB可重用函数

时间:2014-02-26 21:14:55

标签: javascript indexeddb

我正在制作一些使用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
        };
    };
};

1 个答案:

答案 0 :(得分:2)

您的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的内容。