【发布时间】:2020-08-01 09:48:13
【问题描述】:
我正在尝试使用 indexedDB 更新我的简单操作应用程序中的条目,但是我得到 Failed to perform 'put' on 'IDBObjectStore':事务已完成。
我似乎无法弄清楚为什么它不能完成事务,我尝试了调试器,它停在这一行:var updateNameRequest = tasksStore.put( requestForItem.result.name, Number(requestForItem.result.id)) 请参阅下面我包含的 sn-p。对于其他上下文创建、读取和删除工作,它只是更新我遇到问题的数据
我还尝试实现我从 Mozilla 获得的 openCursor 技术,我将其注释掉,因为它也不起作用(我得到相同的行为)Check out my repo I know it's still very messy :(
const request = window.indexedDB.open("toDoList", 2);
var db;
request.onsuccess = function (event) {
console.log("check out some data about our opened db: ", request.result);
db = event.target.result; // result of opening the indexedDB instance "toDoList"
getTasks(); //just a function to retrieve data
};
$(document).on("click", ".editBtn", function () {
var transaction = db.transaction("tasks", "readwrite");
var tasksStore = transaction.objectStore("tasks");
console.log(tasksStore);
let taskId = $(this).attr("idNo");
var requestForItem = tasksStore.get(Number(taskId));
requestForItem.onsuccess = function () {
// console.log(requestForItem.result)
var oldData = requestForItem.result;
// prepopulate the input
$(".editInput").val(requestForItem.result.name);
$(".saveBtn").click(function () {
requestForItem.result.name = $(".editInput").val().trim()
console.log( requestForItem.result)
var updateNameRequest = tasksStore.put( requestForItem.result.name, Number(requestForItem.result.id))
console.log("-------------", updateNameRequest.transaction) // doesn't get to this line
updateNameRequest.onerror = function() {
console.log("something went wrong")
console.log(updateNameRequest.error)
};
updateNameRequest.onsuccess = function() {
console.log("here")
$(".editInput").val("")
getTasks();
};
});
};
【问题讨论】:
-
这能回答你的问题吗? Async operations inside indexeddb cursor
标签: javascript google-chrome indexeddb