indexedDb打开onsucess而没有onupgradeneeded事件

时间:2017-02-16 00:30:11

标签: javascript microsoft-edge indexeddb web-storage

我看到即使objectStoreNames列表为空,也会调用成功回调的indexedDb open请求。

我认为,如果objectStorenames.length为零,则预期的行为是调用“onupgradeneeded”处理程序。

有人知道为什么会发生这种情况吗?

jsbin link

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" }); 
};

2 个答案:

答案 0 :(得分:1)

这似乎是IndexedDB的预期行为。在创建对象库之前,您在db.objectStoreNames.length内查找onupgradeneeded。您需要在onsuccess回调中进行检查。

我还注意到,jsbin中的行为在Chrome,Firefox,Edge和IE中都是相同的。

答案 1 :(得分:0)

问题是有另一段代码正在调用indexedDB.open,但没有收听upgradeneeded事件。