0
有關indexedDB的奇怪之處之一是,使用不在對象庫中的鍵的objectStore.get()請求將生成(event.target.results == undefined)
(請參閱:http://www.w3.org/TR/IndexedDB/#object-store get函數)的成功事件。爲什麼即使objectStore不包含對象,indexedDB objectStore.get也會調用onsuccess?
我需要陷阱這種類型的「成功」並記錄下來。現在,我在返回的事件中找不到KEY。所以我正在做一個真正的黑客並將其存儲在交易中。有什麼建議?
var deferred = new jQuery.Deferred(); // this is what gets returned
var id = view.zoom + "-" + view.tile.column + "-" + view.tile.row;
trans = DB.transaction(["Images"], "readonly");
store = trans.objectStore("Images");
req = store.get(id);
trans._keyPathForGet = id; // hack
req.onsuccess = function (e) {
var blob = e.target.result;
if (blob == undefined) {
console.log("no blob of id: " + e.target.transaction._keyPathForGet);
deferred.resolve(null);
} else {
var imgURL = URL.createObjectURL(blob);
deferred.resolve(imgURL); // let leaflet know we're done, and give it the URL
URL.revokeObjectURL(imgURL); // not sure if we're revoking it too soon here
}