下面的代码在indexedDB对象存储中插入了一个todo对象,然后获得了存储对象的副本(见下文),这很好用。
我担心我正在重用一个使用起来可能不安全的事务--因为该事务已经成功了。
我应该为get创建另一个事务吗--或者这是不必要的?
// this is only called after the 'tasks' object store has been opened
const todoIDB = requestIDB.result
const transaction = todoIDB.transaction(["tasks"], "readwrite")
const todoStore = transaction.objectStore("tasks")
const addRequest = todoStore.add({text:txt_val})
addRequest.addEventListener("success", ()=>{
console.log("Added " + "#" + addRequest.result + ": " + txt_val)
// should I add a new transaction, etc. here?
const getRequest = todoStore.get(addRequest.result)
getRequest.addEventListener("success", ()=>{
console.log("Found " + JSON.stringify(getRequest.result))
})
})
以下是一些(有效的)输出(来自Chrome):
Added #18: aaa
Found {"text":"aaa","id":18}
Added #19: bbb
Found {"text":"bbb","id":19}
1条答案
按热度按时间uqxowvwt1#
事务可以跨越多个请求,所以这是很好的(当然,如果add请求失败--例如记录已经存在--那么“success”不会触发get请求)。
为了澄清一点--当你观察“成功”事件时,成功的是 * 请求 *,而不是 * 事务 *。当整个事务完成时,即当所有单独的请求都成功或一个请求失败并导致事务失败时,“完成”或“中止”事件将在事务对象上触发。