外部indexedDB请求的访问结果(在数组中)

外部indexedDB请求的访问结果(在数组中),indexeddb,Indexeddb,我尝试使用以下代码获取其中一个objectStore的迭代对象的值: enter codefunction get_object(object){ var object = object; var obj_list = []; var transaction = db.transaction([object],"readonly"); var obj_store = transaction.objectStore(object); obj_store

我尝试使用以下代码获取其中一个objectStore的迭代对象的值:

enter codefunction get_object(object){
    var object = object;
    var obj_list = [];
    var transaction = db.transaction([object],"readonly");
    var obj_store   = transaction.objectStore(object);

    obj_store.openCursor().onsuccess = function (event){
        cursor = event.target.result;
        if(cursor){
            console.log(cursor.value);
            obj_list.push(cursor.value);
            cursor.continue();
        }else{
            console.log("Done processing " + object + "...");
            return obj_list;
        }
    };
}

我想做的是访问上述方法之外的obj_列表

将主要功能更改为以下内容:

function get_object(object){
    return new Promise(function(resolve, reject) {
        var object = object;
        var obj_list = [];
        var transaction = db.transaction([object],"readonly");
        var obj_store   = transaction.objectStore(object);

        obj_store.openCursor().onsuccess = function (event){
            cursor = event.target.result;
            if(cursor){
                console.log(cursor.value);
                obj_list.push(cursor.value);
                cursor.continue();
            }else{
                console.log("Done processing " + object + "...");
                resolve(obj_list);
            }
        };
    });
}
然后访问它:

get_object('some_object').then(function (returned_data) {
    console.log(returned_data);
});

乔尼指出了正确的道路。如果您不是JS极客,不想使用承诺,不相信回调方法,那么简单的代码如下:

function get_object(object, callBack){
    var object = object;
    var obj_list = [];
    var transaction = db.transaction([object],"readonly");
    var obj_store   = transaction.objectStore(object);

    obj_store.openCursor().onsuccess = function (event){
        cursor = event.target.result;
        if(cursor){
            console.log(cursor.value);
            obj_list.push(cursor.value);
            cursor.continue();
        }else{
            console.log("Done processing " + object + "...");
            if (callBack && typeof(callBack) == 'function') {
                callBack(obj_list);
            }
            return;
        }
    };
}
然后将其用作:

get_object("data_store", callBack);
function get_object_result_processor(resultSet){
    //Do something
}

运行该代码时会发生什么?您将在cursor.onsuccess()的末尾返回obj_列表,因此我希望它是可见的。您可能需要从该函数返回承诺/延迟,然后在cursor.onsuccess中解析它,因为IndexedDB API是异步的