Не удается получить данные из indexedDB - PullRequest
0 голосов
/ 15 октября 2018

Вот функция, которую я пытаюсь вызвать:

function restoreCurrent() {
    var tzact = db.transaction(['Picture'],"readonly").objectStore("Picture").get(2);
    tzact.onerror = function(event) {
        alert ("Failed to retrieve the data.");
    }
    tzact.onsuccess = function(event) {
        document.getElementById("demo").innerHTML += "Transaction success.<br />";
    }
}
window.onload = function() {
    restoreCurrent();
}

Как вы можете видеть, она должна что-то выводить либо при успешном завершении, либо при ошибке.На самом деле это ничего не выводит.После этого у меня был дополнительный код в функции .onsuccess, но ничего не выполняется.И линия, где он перестает работать - это вызов базы данных, я много тестировал.Для записи, и эта строка кода, когда я создавал базу данных

var tzact = db.transaction(['Picture'], "readwrite").objectStore("Picture").add({id : 2, pictureData : working});

, и эта строка, когда я пытаюсь обновить эту конкретную запись

var tzact = db.transaction(['Picture'], "readwrite").objectStore("Picture").put({id : 2, pictureData : working});

, казалось, выполняются OK - илипо крайней мере, функции, в которые они были встроены, продолжали выводить сообщения об успехе.Без возможности извлечь какие-либо данные, трудно быть уверенным.

РЕДАКТИРОВАТЬ: сам понял.Ответ в том, что я должен был поместить это в каждую функцию:

var request = window.indexedDB.open("[database name]",5);
request.onerror = function() {
    alert ("Failed to open the database.");
}
request.onsuccess = function() {
    var db = request.result;
    var tzact = db.transaction(['Picture'],"readonly").objectStore("Picture").get(2); // or "readwrite" and .put(2), as the case might be
    tzact.onerror=function() {
        alert ("Data transaction failed.");
    }
    tzact.onsuccess=function() {
        document.getElementById("demo").innerHTML += "Data transaction successful.<br />";
        if (tzact.result) {
            var working = tzact.result.pictureData;
            // the rest of the function goes here
        } else {
            alert ("No data received.");
        }
    }
}
...