Я читал эту статью из 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 примеров работают
Интересно, какой из них предпочтительнее и почему он предпочтителен? Действительно ли необходимо использовать транзакцию?