遍历indexedDB中的对象时无法检索对象属性

时间:2019-05-29 17:38:15

标签: javascript indexeddb

当遍历存储在indexedDB中的对象时,我无法检索属性。当我尝试通过tasksStore.get(i);获取对象时,出现错误Cannot read property 'property' of undefined at IDBRequest.getTasks.onsuccess,但是,如果将其更改为tasksStore.get(1);,它可以正常工作,并获取id = 1 x索引长度的对象

我尝试检查两种方式的类型,它们都返回数字。

//success handler on connection
    request.onsuccess = function(e) {
        db = request.result;

        //define store index
        tasksStore = tasksTx.objectStore("tasksStore");

        //error handler on result of the request
        db.onerror = function(e) {
            console.log("ERROR " + e.target.errorCode);
        }

        //variable for counting objects in the index
        let amountOfTasks = tasksIndex.count();

        //error handler
        amountOfTasks.onerror = function() {
            console.log("There was an error finding the amount of tasks")
        }

        //success handler
        amountOfTasks.onsuccess = function() {
            for (var i = 1; i < amountOfTasks.result; i++) {
                let getTasks = tasksStore.get(i);

                let getTasksElementContainer = document.getElementById("list-tasks");
                let createTasksList = document.createElement("li");
                createTasksList.id = "task-" + i;

                getTasks.onerror = function() {
                    console.log("There was an error looping through the tasks")
                }

                getTasks.onsuccess = function() {
                    console.log(getTasks.result.title); //getTasks.result works, getTasks.result.title does not.
                    getTasksElementContainer.appendChild(createTasksList);
                    //JSON stringify to return object in string format, and not [Object object]
                    createTasksList.innerHTML = JSON.stringify(getTasks.result.title);
                }
            }   
        }
    }

1 个答案:

答案 0 :(得分:0)

当您使用数据库中不存在的键调用IDBObjectStore.get时,结果值是不确定的。这可能解释了为什么有时getTasks.result是不确定的。

如果您仍然遇到问题,可以通过制作一个独立的可复制示例来很好地为您服务。在此过程中,您可能会发现自己的错误。如果不是这样,那么如果您有一些其他人可以运行以直接观察到该问题的代码(例如,包括数据库创建和插入数据),则可以更容易地获得有关Stack Overflow的更具体帮助。