我有以下代码:
transaction = db.transaction("myStore", "readwrite");
objStore = transaction.objectStore(myStore);
Index = objStore.index(key);
request = Index.openCursor(field);
request.onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
request = objStore.delete(cursor.value.key);
request.onsuccess = function(event) {
console.log("delete successful");
return;
};
交易范围是“myStore” 我可以继续引用事务来保持它alive,以便我可以递归地删除返回的游标数据。
这是否意味着因为它始终是相同的事务,删除数据的任何问题都会回滚所有已删除的事务?
答案 0 :(得分:2)
事务确保为获得一致状态而需要执行的多个操作都是成功的。如果一个失败,意味着你将获得一个不一致的状态,它需要回滚到原始状态。用一个具体的例子。如果您将资金从一个帐户转移到另一个帐户,如果两个余额中的某些余额相同,则您只能拥有一致的状态。表示从一个帐户重绘值时,必须将其添加到另一个帐户以获得一致状态。如果其中一个失败,则事务将返回到原始状态。
因此,为了表现或其他事情保持交易活着不是一个好的选择。同样在indexeddb API中,事务是自动提交的。意味着当事务不包含任何操作或变为非活动状态时,它将提交更改。
最后一点是要解决你的问题。如果在同一事务中删除失败,则在同一事务中执行的所有删除都将回滚。如果您不想要此行为,则需要创建多个事务。