indexedDb 在没有 onupgradeneeded 事件的情况下打开成功
indexedDb open onsucess without onupgradeneeded event
我看到 indexedDb 打开请求的成功回调被调用,即使 objectStoreNames 列表为空。
我认为预期的行为是在 objectStorenames.length 为零时调用 "onupgradeneeded" 处理程序。
有人知道为什么会这样吗?
var db;
var DBOpenRequest = window.indexedDB.open("todos", 1);
DBOpenRequest.onerror = function(event) {
console.error('error in open', event);
};
DBOpenRequest.onsuccess = function(event) {
db = event.target.result;
var objectStores = db.objectStoreNames.length;
console.log('success event, number of objectStores: ' + objectStores);
};
DBOpenRequest.onupgradeneeded = function(event) {
db = event.target.result;
var objectStores = db.objectStoreNames.length;
console.log('upgradeneeded event, number of objectStores: ' + objectStores);
db.createObjectStore("toDoList", { keyPath: "taskTitle" });
};
这似乎是 IndexedDB 的预期行为。在创建对象存储之前,您正在 onupgradeneeded
内部查找 db.objectStoreNames.length
。您需要在 onsuccess
回调中检查它。
我还注意到,您的 jsbin 中的行为在 Chrome、Firefox、Edge 和 IE 中是相同的。
问题是有另一段代码在调用 indexedDB.open,但没有监听 upgradeneeded 事件。
我看到 indexedDb 打开请求的成功回调被调用,即使 objectStoreNames 列表为空。
我认为预期的行为是在 objectStorenames.length 为零时调用 "onupgradeneeded" 处理程序。
有人知道为什么会这样吗?
var db;
var DBOpenRequest = window.indexedDB.open("todos", 1);
DBOpenRequest.onerror = function(event) {
console.error('error in open', event);
};
DBOpenRequest.onsuccess = function(event) {
db = event.target.result;
var objectStores = db.objectStoreNames.length;
console.log('success event, number of objectStores: ' + objectStores);
};
DBOpenRequest.onupgradeneeded = function(event) {
db = event.target.result;
var objectStores = db.objectStoreNames.length;
console.log('upgradeneeded event, number of objectStores: ' + objectStores);
db.createObjectStore("toDoList", { keyPath: "taskTitle" });
};
这似乎是 IndexedDB 的预期行为。在创建对象存储之前,您正在 onupgradeneeded
内部查找 db.objectStoreNames.length
。您需要在 onsuccess
回调中检查它。
我还注意到,您的 jsbin 中的行为在 Chrome、Firefox、Edge 和 IE 中是相同的。
问题是有另一段代码在调用 indexedDB.open,但没有监听 upgradeneeded 事件。