我正在嘗試使用openCursor()方法遍歷我的「product」objectStore中的所有對象。indexedDB - objectStore.openCursor()不會返回objectStore中的所有對象
function getAllProducts(){
var products = [];
var transaction = db.transaction(["product"], "readonly");
var objectStore = transaction.objectStore("product");
objectStore.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if(cursor) {
products.push(cursor.value);
cursor.continue();
}
};
}
我的「產品」objectStore包含五(5)個對象。所以我期待我的產品陣列長度也是5。但是,通過日誌檢查時,似乎迭代的對象數量不是恆定的。有時它只返回一(1)條記錄,還有時間它只返回兩(2)條記錄。
我的代碼有什麼問題?有什麼我失蹤?
我嘗試添加onsuccess,onerror & onabort句柄,但控制檯中仍然沒有其他日誌。下面是我的更新代碼:
function getAllProducts(){
var products = [];
var transaction = db.transaction(["product"], "readonly");
var objectStore = transaction.objectStore("product");
objectStore.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if(cursor) {
products.push(cursor.value.name);
cursor.continue();
}
console.log(products);
};
transaction.oncomplete = function(event) {
console.log(event);
};
transaction.onerror = function(event) {
console.error(event);
};
transaction.onabort = function(event) {
console.log("YO YO YO");
console.error("transaction aborted");
};
}
嘗試添加上述處理程序,並沒有記錄的消息。這是否意味着交易也沒有完成,因爲它沒有記錄任何東西? – user3931577
因此transaction.oncomplete消息未被記錄?這意味着交易掛在某處而不是完成。你使用的是什麼瀏覽器? –
是的,這可能是那個原因,但我怎麼知道爲什麼交易沒有完成?順便說一句,我正在使用鉻。 – user3931577