2016-02-08 34 views
2

我想使用IndexedDB,並且一切都很好,直到幾個小時前,當我的.open()回調停止在Chrome上調用時(在Safari上測試並且它工作正常)。未在Chrome上調用IndexedDB.open回調

RT.prototype.setupIndexedDB = function (callback) { 
    var dbName = "test"; 
    var dbVersion = 1; 
    var indexedDB = window.indexedDB || 
        window.webkitIndexedDB || 
        window.mozIndexedDB; 

    console.log("setup indexed db"); 
    var request = indexedDB.open(dbName, dbVersion); 
    request.onsuccess = function(e) { 
    console.log("db request success"); 
    }; 

    request.onblocked = function(e) { 
    console.log("DB open blocked", e); 
    }; 

    request.onerror = function(err) { 
    console.log("error", err); 
    }; 

    request.onversionchange = function(err) { 
    console.log("onversionchange", err); 
    }; 

    request.onupgradeneeded = function(e) { 
    console.log("upgrade needed"); 
    }; 
}; 

我看着Chrome開發人員工具是IndexedDB和無所不有......

任何人對所發生的事情的想法?

謝謝

編輯:完全重新啓動瀏覽器並獲得成功,但我仍然知道發生了什麼事很感興趣。

回答

5

是否正在嘗試在同一時間刪除數據庫?如果存在被阻塞的待執行的deleteDatabase操作,IndexedDB可能會陷入一個奇怪的狀態(儘管根據規範正確)。例如。下面的代碼。如果一切都失敗了,你可以檢查chrome:// indexeddb-internals,它會告訴你是否有任何懸而未決的打開或刪除操作正在進行。

var request = indexedDB.open("test", 1); 
request.onblocked = function(e) { 
    console.log("DB open blocked", e); 
}; 

request.onerror = function(err) { 
    console.log("DB open error", err); 
}; 

request.onupgradeneeded = function(e) { 
    console.log("DB open upgrade needed"); 
}; 

request.onsuccess = function(e) { 
    db = request.result; 
    console.log("DB open success"); 
    db.onversionchange = function(e) { 
    console.log("DB got a versionchange event") 
    } 
    request = indexedDB.deleteDatabase("test"); 
    request.onsuccess = function(e) { 
    console.log("delete success will not be called") 
    } 
    request.onblocked = function(e) { 
    console.log("delete was blocked"); 
    request = indexedDB.open("test", 1); 
    request.onsuccess = function(e) { 
     console.log("success won't be called"); 
    }; 
    request.onblocked = function(e) { 
     console.log("blocked won't be called", e); 
    }; 
    request.onerror = function(err) { 
     console.log("error won't be called", err); 
    }; 
    request.onupgradeneeded = function(e) { 
     console.log("upgradeneeded won't be called"); 
    }; 
    }; 
}; 
+0

不,我沒有刪除數據庫,但有我的估計有待處理的請求。謝謝您的回答。 –