IndexedDB извлекает все объекты и добавляет их в массив, курсор равен нулю - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать функцию, которая возвращает массив всех объектов в хранилище объектов.Это код 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;
}

Возвращает пустой массив.Я обнаружил, что объект курсора имеет значение null, но не могу понять, почему, поскольку в хранилище объектов есть 3 объекта.

1 Ответ

0 голосов
/ 24 сентября 2018

Вы не можете ничего вернуть из асинхронного вызова без обратного вызова или обещания, вот функция, реализованная с обратным вызовом.

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.
})

для дальнейшего использования, пожалуйста, прочитайте этот вопрос и его ответы:

Как вернуть ответ от асинхронного вызова?

Этот процесс является самой сущностью работы с веб-API в браузере.

...