使用IndexedDB游标进行分页

时间:2011-03-02 06:10:56

标签: javascript html5

我有一个IndexedDB数据存储,其中包含几百个对象。我想根据该商店的一个索引中的订单从中获取40-59项。有没有办法在开始使用数据之前简单地调用cursor.continue()39次?在处理时间方面似乎相当浪费。

2 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,你想要使用cursor.advance(40)

我花了一段时间才弄明白这一点可能对其他人有用的一点是,如果你想要推进游标并迭代结果,你需要在单独的openCursor().onsuccess处理程序中调用它们,或者实现某种跟踪以防止它们在同一请求中被调用或被抛出InvalidStateError异常。这可以这样做:

单独的处理程序

// advance first
store.openCursor().onsuccess = function(event) {
    var cursor = event.target.result;
    cursor.advance(40);
};

// then iterate
objectStore.openCursor().onsuccess = function(event) {
    var cursor = event.target.result;
    cursor.continue();
});

相同处理程序

// create flag for advancing
var advancing = true;

store.openCursor().onsuccess = function(event) {

    var cursor = event.target.result;

    // advancing
    if (advancing === true) {

        cursor.advance(40);

        // set advancing flag to false so we don't advance again
        advancing = false;

    }
    // continuing
    else {

        cursor.continue();

    }

}

规格参考:http://www.w3.org/TR/IndexedDB/#widl-IDBCursor-advance-void-unsigned-long-count MDN参考示例:https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.advance

答案 1 :(得分:2)

我相信你可以致电cursor.advance(40)

规格参考:http://www.w3.org/TR/IndexedDB/#widl-IDBCursor-advance