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