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