IndexedDB检索所有对象并将它们添加到数组中,游标为null

时间:2018-09-23 21:45:33

标签: javascript indexeddb

我正在尝试创建一个函数,该函数返回对象存储库中所有对象的数组。这是我目前拥有的JavaScript代码:

function readAllSessions() {
    var output = [];
    database.transaction("practiceSessions").objectStore("practiceSessions").openCursor().onsuccess = function (e) {
        var cursor = e.target.result;
        if (cursor) {
            output.push(cursor.value);
            cursor.continue();
        }
    }
    return output;
}

这将返回一个空数组。我发现游标对象为空,但我看不出为什么,因为对象存储区中有3个对象。

1 个答案:

答案 0 :(得分:1)

在没有回调或承诺的情况下,您无法从异步调用返回任何内容,这是通过回调实现的功能。

function readAllSessions(callback) {
    var output = [];
    database.transaction("practiceSessions").objectStore("practiceSessions").openCursor().onsuccess = function (e) {
        var cursor = e.target.result;
        if (cursor) {
            output.push(cursor.value);
            cursor.continue();
        }else{
          callback(output)
        }
    }
}


readAllSessions(function(output){
   // use output here.
})

供以后参考,请阅读此问题及其答案:

How do I return the response from an asynchronous call?

此过程是在浏览器中使用Web API的本质。