2017-02-16 3 views
0

objectStoreNamesリストが空でも、indexedDbオープンリクエストが成功コールバックでコールされているのが見えてきました。indexedDb open onsucess onupgradeneedイベントなし

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

ストアの名前リストは空ですが、クエリは有効なので、エラーではなく成功します。 onsuccessコールバックのクエリの結果を調べる必要があります。 – John

+0

私はあなたがすでに何らかの形でEdgeにバージョン "1"の空のデータベースを持っていると思う。バージョンを「2」に変更すると、アップグレードが行われる可能性があります。または、EdgeからIDBをクリアします。 – dgrogan

+0

私は、indexedDbがこの状態になる可能性のある既知のパスがあるかどうかを理解しようとしています。この問題は、ブラウザからindexedDbデータベースを削除すると解決されます。 – sbr

答えて

0

問題は、別のコードがindexedDB.openを呼び出していて、アップグレードされたイベントをリッスンしていないということでした。

1

これはのIndexedDBの予想される動作であるように思われます。オブジェクトストアが作成される前にdb.objectStoreNames.lengthonupgradeneededの範囲内にあります。代わりにonsuccessコールバックで確認する必要があります。

jsbinの動作は、Chrome、Firefox、Edge、IEで同じです。

関連する問題