在IDBDatabase.createObjectStore之后是否必须使用IDBObjectStore.transaction.oncomplete?

时间:2018-06-29 18:06:34

标签: javascript indexeddb

我正在阅读MDN上的这篇文章:Using IndexedDB

有两个创建新对象存储并在创建后添加数据的示例。

第一个示例使用IDBObjectStore.transaction.oncomplete确保在添加数据之前完成商店创建。

var objectStore = db.createObjectStore("customers", { keyPath: "ssn" });
// Use transaction oncomplete to make sure the objectStore creation is 
// finished before adding data into it.
objectStore.transaction.oncomplete = function(event) {
  var customerObjectStore = db.transaction("customers", "readwrite").objectStore("customers");
  customerData.forEach(function(customer) {
    customerObjectStore.add(customer);
  });
};

但是,当我看下面的示例时,这让我有些困惑:

var objStore = db.createObjectStore("names", { autoIncrement : true });
customerData.forEach(function(customer) {
  objStore.add(customer.name);
});

您可以看到数据是在没有事务的情况下添加的,因此,从理论上讲,第二个示例在尝试在对象存储就绪之前添加数据时会引起一些问题。

令人惊讶的是,两个示例都可以工作

我想知道应该优先选择哪个人,为什么要优先选择它。真的有必要使用交易吗?

1 个答案:

答案 0 :(得分:0)

使用第二个示例,不需要第一个示例。