未捕获的InvalidStateError:无法从“ IDBRequest”读取“ result”属性:请求尚未完成

Lin*_*nda 5 javascript indexeddb

我需要你们的帮助。

我正在使用indexedDB。我需要使用从数据库中的表中读取记录,Javascript但是从Chrome浏览器V52中收到一条错误消息,提示未捕获InvalidStateError:无法从“ IDBRequest”读取“ result”属性:请求尚未完成。

以下是我的Javascript代码

var db; var availableJobs = 0;

    window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;

    var request = window.indexedDB.open("MyDbName", 1);

    request.onsuccess = function (event) {
        db = request.result;
    }

    request.onblocked = function (event) {
        db = "blocked...";
    };

    request.onerror = function (event) {
        db = "Error...";

    };

    var objectStore = db.transaction("ActionCard").objectStore("ActionCard");

    objectStore.openCursor().onsuccess = function (event) {
        var cursor = event.target.result;

        if (cursor) {
            if (cursor.value.ActionCardStatusId == 1 || cursor.value.ActionCardStatusId == 3) {
                availableJobs++;
            }

            cursor.continue();
        }

        $("#availableJobs").html(availableJobs);
    }
Run Code Online (Sandbox Code Playgroud)

我在此行收到一条错误消息

var objectStore = db.transaction("ActionCard").objectStore("ActionCard");
Run Code Online (Sandbox Code Playgroud)

Jos*_*osh 5

您需要学习如何编写异步Javascript。您访问数据库时未定义您的db变量。

不要这样做:

var r = indexedDB.open();
var db = null;
r.onsuccess = function(event) { db = event.target.result); }
Run Code Online (Sandbox Code Playgroud)

做这个:

var r = indexedDB.open();
r.onsuccess = function(event) {
  var db = event.target.result;
};
Run Code Online (Sandbox Code Playgroud)

是的,这意味着db在onsuccess函数的范围之外不可用。停止尝试在其范围之外使用它,否则您将遇到遇到的问题。