Должен ли IDBObjectStore.transaction.oncomplete обязательно использоваться после IDBDatabase.createObjectStore? - PullRequest
0 голосов
/ 29 июня 2018

Я читал эту статью из MDN: Использование IndexedDB .

Есть 2 примера, которые создают новое хранилище объектов и добавляют данные после создания.

В первом примере используется 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);
});

Как видно, данные добавляются без транзакции, поэтому теоретически второй пример может вызвать проблемы при попытке добавить данные до того, как хранилище объектов будет готово.

Удивительно, но оба из 2 примеров работают

Интересно, какой из них предпочтительнее и почему он предпочтителен? Действительно ли необходимо использовать транзакцию?

1 Ответ

0 голосов
/ 29 июня 2018

Используйте второй пример, первый не нужен.

...