Как читать данные из IndexedDB с помощью вложенного курсора? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь прочитать данные из двух разных хранилищ объектов из IndexedDB. Я использую "вложенные" курсоры. Но это не работает, как я исключаю. Это работает, когда я читаю это отдельно.

Для первого студента это проходит один раз через внутренний курсор, для второго студента два раза и т. Д.

Я должен использовать IndexedDB с EcmaScript6.

Вот мой код:

function listMarkByStudents(event){

    let transaction = db.transaction(["students", "marks"], "readonly");
    let storeStudents = transaction.objectStore("students");
    let storeMarks = transaction.objectStore("marks");

    let indexStudents = storeStudents.index('sName');
    let indexMarks = storeMarks.index('idStudent')

    let output = '';

    indexStudents.openCursor().onsuccess = function (event){
        let cursorStudents = event.target.result;
        if(cursorStudents){
            output += "<tr>";
            output += "<td>"+cursorStudents.value.id+"</td>";
            output += "<td>"+cursorStudents.value.sName+"</td>";
            output += "<td>"+cursorStudents.value.email+"</td>";
            output += "</tr>";

            indexMarks.openCursor().onsuccess = function (event){
                let cursorMarks = event.target.result;
                if (cursorMarks){
                    output += "<tr>";
                    output += "<td>"+cursorMarks.value.markValue+"</td>";
                    output += "<td>"+cursorMarks.value.idStudent+"</td>";
                    output += "<td>"+cursorMarks.value.idSubject+"</td>";
                    output += "</tr>";

                    cursorMarks.continue();
                }
            }
            cursorStudents.continue();
        }       
        document.getElementById('StudentsMarkList').innerHTML = output;
    }
}
...