javascript - indexedDB 可重用函数

标签 javascript indexeddb

我正在制作一些使用 indexdDB 的原型(prototype)应用程序,但我不知道如何创建可重用的函数。 例如,我想创建可重用函数来检索 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/

相关文章:

javascript - 在 Bootstrap slider 上具有相同值的另一个 slider 上滑动相同的 slider

indexeddb - JsStore 搜索空值

javascript - 如何制作div的 slider ?

javascript - 在 meteor 中读取 shell 命令的输出

javascript - str replace 在没有收到正确数量的参数时表现得很有趣

dart - 使用lawndart获取indexedDB中对象的值

database - 在 IndexedDB 中强制更新

javascript - 在 JavaScript 中将对象设置为键值(值是数组或列表)的 Immutable Map

javascript - 如何在indexedDB中存储mongodb集合数组

javascript - indexedDB 在概念上与 HTML5 本地存储有何不同?