Как получить данные из хранилища объектов от номера индекса n до k. Например, если у нас есть 100 записей в магазине (ProductStore), мне нужно перейти от индекса 11 к 20 или с 50 до 60. Мне нужно использовать это при разбивке на страницы. В mysql мы можем использовать предложения LIMIT и OFFSET, есть ли какой-либо эквивалент OFFSET в Indexeddb.
1 ответ
Вы можете использовать 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();
};
});
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.