我看到有時在執行indexedDb.open()時,沒有事件被觸發。 如果我設置超時並觀察openRequest的狀態,就緒狀態設置='完成'。如果我在openRequest.result的db上做任何事務,它就可以正常工作。indexedDb沒有事件在開啓時觸發
我的猜測是,在某些情況下,openRequest執行完成後纔會附加'onsuccess'或其他事件處理程序,換句話說,它不會在下一個事件循環中執行。
所以,如果沒有事件發生,我可以在'x'時間後檢查狀態。然而,這種方法是駭人而脆弱的。 有誰知道更好的方法來解決這個問題?
var db;
var openRequest = window.indexedDB.open("todos", 1);
openRequest.onerror = function(event) {
console.error('error in open', event);
};
openRequest.onsuccess = (event) => {
console.log('success ' , event)
};
openRequest.onupgradeneeded = (event) => {
console.log('upgradeneeded ' , event);
db = event.target.result;
db.createObjectStore("toDoList", { keyPath: "taskTitle" });
};
openRequest.onblocked = (event) => {
console.log('blocked ' , event);
};
setTimeout(() => {
console.log('timeout');
console.log(openRequest.readyState) // equals done
}, 10000)
爲什麼使用全局數據庫變量?而且,爲什麼你只需要在onupgradeneeded函數中爲db賦值呢? – Josh
這段代碼只是簡單的記錄語句。數據庫也將從成功處理程序中設置。 – sbr