0
我在嘗試學習如何使用IndexedDb,並且我的下一步是從商店獲取結果頁面。我的策略是將檢索的最後一個關鍵字存儲在服務中,並使用該關鍵字將該關鍵字作爲下一個請求的下限來打開遊標。下面是我最初定義它的函數:使用光標從IndexedDb獲取結果頁面
service.getListPage = function(store, pageSize) {
pageSize = pageSize || 15;
var deferred = $q.defer();
//called on cursor open success event
var getPage = function (cursorEvent) {
var page = [];
var cursor = cursorEvent.target.result;
if (cursor) {
for (var i = 0; i < pageSize; i++) {
page.push(cursor.value);
cursor.continue();
}
lastKeyOnPage[store] = cursor.key;
deferred.resolve(page);
} else {
deferred.resolve([]);
}
}
var transaction = service.db.transaction([store], "readonly");
var objectStore = transaction.objectStore(store);
var cursor;
if (lastKeyOnPage.hasOwnProperty(store) && lastKeyOnPage[store]) {
cursor = objectStore.openCursor(IDBKeyRange.lowerBound(lastKeyOnPage[store]));
} else {
cursor = objectStore.openCursor();
}
cursor.onsuccess = getPage;
return deferred.promise;
}
如果我想在店裏使用該功能只有一個項目,我遇到了兩個問題:
- 將繼續函數會拋出一個錯誤(所以我使用try/catch,解析catch塊中的數組值)
- 遊標將返回相同的值,
pageSize
次(所以我試着檢查當前循環迭代中的主鍵是否與最後一次匹配一個)
雖然這仍然不起作用。現在商店中有兩件商品,如果我調用這個函數,它會得到第一個商品,然後拋出一個錯誤,說明光標正在迭代或超過其結束。
我是否錯過了這應該如何工作?我只會使用getAll,但這是針對Cordova應用程序的,並且該方法不可用。我怎樣才能獲得一定數量的結果?