为什么字典键中的IndexedDB cursor.value.key会给出undefined?

ddrv8njm  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(192)

我想把IDB中添加的字典的每个键的每个值追加到表的单元格中。
词典的添加方式如下:

var trans_write = data_base.transaction(["students"], "readwrite");
var petition_write = trans_write.objectStore("students");
var query = petition_write.add(dictionary);

data_base是触发onsuccess事件时存储e.target.result;的全局变量
然后,我将同一个字典传递给一个函数,该函数将迭代来自同一个字典的每个键的值,这样我就可以将其值添加到一个单元格,然后将该单元格添加到一行,最后添加到主表:

function displayDataOnTable(dictionary) {

    var trans = data_base.transaction(["students"], "readonly");
    var query = trans.objectStore("students");

    var cursor = query.openCursor();
    cursor.addEventListener("success", function(e) {

        var the_cursor = e.target.result;

        if (the_cursor) {

            var new_row = document.createElement("tr");
            for (var key in dictionary) {

                var cell_data = the_cursor.value.key;
                var new_cell = document.createElement("td");
                new_cell.append(cell_data);
                new_row.append(new_cell);

            }

            table.append(new_row);
            the_cursor.continue();

        }

    }, false);

}

正如你所猜测的,table是全局变量,它已经分配了一个HTMLTable,后者是通过它的id获得的:document.getElementById("idTable");
我遇到的问题是var cell_data = the_cursor.value.key;行将cell_data赋值为undefined,并且for (var key in dictionary)的迭代器key引用了它,声明了它,但它从未被读取,所以这导致表中所有的单元格都是“undefined”。
有什么解决办法吗?最好的问候。谢谢。
更新#2(共享原始的完整代码,包括JS和HTML。英语不是我的主要语言,所以请原谅):
第一次

trnvg8h3

trnvg8h31#

在将数据写入IndexedDB之前,无法从IndexedDB读取数据。很可能是在写入数据之前调用了displayDataOnTable。如果在数据存在之前查询数据,则会遇到您所描述的问题。
如需更多说明,请提供呼叫写入程式码的程式码,并显示您呼叫写入程式码的时间、程式码中等待写入呼叫完成的位置,以及执行读取的位置。
请记住,IndexedDB的API使用非阻塞函数。如果您开始执行写操作,不要等待它完成(阻塞直到它完成),然后开始读操作,您将遇到争用条件。请搜索关键字“indexeddb”和“async”的问题以了解更多信息,或者搜索有关异步JavaScript的一般主题。

相关问题