indexeddb 从索引 n 到索引 k 获取数据
indexeddb get data from index n to index k
如何从索引号 n 到 k 的对象存储中获取数据。
例如,如果我们在商店 (ProductStore) 中有 100 条记录,我需要从索引 11 到 20 或 50 到 60。我需要在分页中使用它。在mysql中我们可以使用LIMIT和OFFSET clouse,在Indexeddb中有没有等价于OFFSET的。
您可以使用cursor.advance 跳过某些记录。游标没有限制,您只需计算迭代次数即可停止迭代。
像这样:
function query(db, criteria, offset, limit) {
return new Promise((resolve, reject) => {
const results = [];
const transaction = db.transaction('store');
transaction.oncomplete = event => resolve(results);
transaction.onerror = event => reject(event.target);
const store = transaction.objectStore('store');
const index = store.index('index');
const request = index.openCursor(criteria);
let advanced = offset === 0;
let counter = 0;
request.onsuccess = event => {
const cursor = event.target.result;
if (!cursor) {
return;
}
if (!advanced) {
advanced = true;
cursor.advance(offset);
}
counter++;
results.push(cursor.value);
if (counter >= limit) {
return;
}
cursor.continue();
};
});
}
如何从索引号 n 到 k 的对象存储中获取数据。 例如,如果我们在商店 (ProductStore) 中有 100 条记录,我需要从索引 11 到 20 或 50 到 60。我需要在分页中使用它。在mysql中我们可以使用LIMIT和OFFSET clouse,在Indexeddb中有没有等价于OFFSET的。
您可以使用cursor.advance 跳过某些记录。游标没有限制,您只需计算迭代次数即可停止迭代。
像这样:
function query(db, criteria, offset, limit) {
return new Promise((resolve, reject) => {
const results = [];
const transaction = db.transaction('store');
transaction.oncomplete = event => resolve(results);
transaction.onerror = event => reject(event.target);
const store = transaction.objectStore('store');
const index = store.index('index');
const request = index.openCursor(criteria);
let advanced = offset === 0;
let counter = 0;
request.onsuccess = event => {
const cursor = event.target.result;
if (!cursor) {
return;
}
if (!advanced) {
advanced = true;
cursor.advance(offset);
}
counter++;
results.push(cursor.value);
if (counter >= limit) {
return;
}
cursor.continue();
};
});
}