IDBCursor: метод continuePrimaryKey()
Базовая Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2021 года.
Примечание: Эта функция доступна в Потоках Web Workers.
Метод continuePrimaryKey() интерфейса IDBCursor перемещает курсор к элементу, ключ которого совпадает с параметром key, а первичный ключ — с параметром primary key.
Типичный случай использования — возобновление итерации, где предыдущий курсор был закрыт, без необходимости сравнивать ключи по одному.
Вызов этого метода более одного раза до загрузки новых данных курсора — например, вызов continuePrimaryKey() дважды из одного и того же обработчика onsuccess — приводит к сбросу InvalidStateError во время второго вызова, потому что флаг значения курсора сброшен.
Этот метод допустим только для курсоров, полученных из индекса. Использование его для курсоров, полученных из хранилища объектов, вызовет ошибку.
Синтаксис
continuePrimaryKey(key, primaryKey)
Параметры
key-
Ключ, по которому нужно расположить курсор.
primaryKey-
Первичный ключ, по которому нужно расположить курсор.
Возвращаемое значение
Ничего (undefined).
Исключения
Этот метод может вызвать исключение DOMException одного из следующих типов:
-
TransactionInactiveErrorDOMException -
Выбрасывается, если транзакция этого
IDBCursorнеактивна. -
DataErrorDOMException -
Выбрасывается, если параметр key имеет любое из следующих условий:
- Ключ не является допустимым ключом.
- Ключ меньше или равен текущей позиции курсора, и направление курсора —
nextилиnextunique. - Ключ больше или равен текущей позиции курсора, и направление курсора —
prevилиprevunique.
-
InvalidStateErrorDOMException -
Выбрасывается, если курсор в данный момент итерируется или итерация прошла за его конец.
-
InvalidAccessErrorDOMException -
Выбрасывается, если направление курсора не
prevилиnext.
Примеры
Вот как можно возобновить итерацию по всем статьям с тегом "javascript" с момента последнего посещения:
let request = articleStore.index("tag").openCursor();
let count = 0;
let unreadList = [];
request.onsuccess = (event) => {
let cursor = event.target.result;
if (!cursor) {
return;
}
let lastPrimaryKey = getLastIteratedArticleId();
if (lastPrimaryKey > cursor.primaryKey) {
cursor.continuePrimaryKey("javascript", lastPrimaryKey);
return;
}
// update lastIteratedArticleId
setLastIteratedArticleId(cursor.primaryKey);
// preload 5 articles into the unread list;
unreadList.push(cursor.value);
if (++count < 5) {
cursor.continue();
}
};
Спецификации
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari в iOS | Samsung Internet | WebView Android | |
continuePrimaryKey |
58 | 79 | 10 | 45 | 10.1 | 58 | 51 | 43 | 10.3 | 7.0 | 58 |
См. также
- Использование IndexedDB
- Начало транзакций:
IDBDatabase - Использование транзакций:
IDBTransaction - Установление диапазона ключей:
IDBKeyRange - Получение и изменение данных:
IDBObjectStore - Использование курсоров:
IDBCursor - Пример ссылок: Уведомления о задачах (Просмотреть пример онлайн).
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/continuePrimaryKey