Библиотека idb-keyval представляет собой удобный и
лёгкий слой поверх IndexedDB, предоставляющий простые методы для работы
с ключами и значениями. Одной из базовых операций является получение
всех ключей хранилища с помощью функции keys. Эта операция
позволяет получить полный список ключей, что важно для перебора данных,
анализа содержимого хранилища и управления кэшированными объектами.
keysimport { keys } from 'idb-keyval';
keys(storeName?: IDBObjectStore | undefined): Promise<Array<string>>
storeName (необязательный) —
объект хранилища IndexedDB, если используется кастомное хранилище вместо
стандартного.import { keys } from 'idb-keyval';
async function listKeys() {
const allKeys = await keys();
console.log(allKeys); // ['user1', 'sessionToken', 'settings']
}
listKeys();
В этом примере функция keys возвращает массив всех
ключей, сохранённых через стандартное хранилище idb-keyval. Операция
является асинхронной и удобна для использования с
async/await.
Библиотека поддерживает создание собственного хранилища, что
позволяет использовать отдельные базы данных и объектные хранилища.
Функция keys принимает ссылку на такое хранилище.
import { createStore, keys } from 'idb-keyval';
const customStore = createStore('myDB', 'myStore');
async function listCustomStoreKeys() {
const storeKeys = await keys(customStore);
console.log(storeKeys); // ['config', 'theme', 'token']
}
listCustomStoreKeys();
Создание кастомного хранилища особенно полезно при разделении данных между различными модулями приложения или при реализации многопользовательской логики.
Метод keys возвращает Promise, так как
доступ к IndexedDB выполняется асинхронно. Это предотвращает блокировку
основного потока и делает работу с данными плавной. Любые операции,
зависящие от списка ключей, должны выполняться внутри блока
then или с использованием async/await.
keys().then(allKeys => {
allKeys.forEach(key => console.log(key));
});
Использование async/await делает код более читабельным и
удобным для последовательной обработки данных.
import { keys, get } from 'idb-keyval';
async function listAllEntries() {
const allKeys = await keys();
for (const key of allKeys) {
const value = await get(key);
console.log(key, value);
}
}
listAllEntries();
Такой подход позволяет динамически обрабатывать данные, не зная заранее всех ключей.
import { keys, del } from 'idb-keyval';
async function clearStore() {
const allKeys = await keys();
await Promise.all(allKeys.map(key => del(key)));
}
clearStore();
Использование Promise.all ускоряет удаление, выполняя
операции параллельно.
import { keys } from 'idb-keyval';
async function filterKeys(prefix) {
const allKeys = await keys();
return allKeys.filter(key => key.startsWith(prefix));
}
filterKeys('user_').then(filtered => console.log(filtered));
Такой подход облегчает управление данными по категориям и пространствам имён.
keys возвращает только ключи,
без значений. Для получения значений необходимо использовать метод
get.Promise для исключения ошибок при попытке синхронного
использования списка ключей.createStore.try/catch или метод
catch у Promise, так как доступ к IndexedDB может
завершиться неудачей при недоступной базе данных.get и set для
реализации гибких механизмов кэширования и динамического управления
данными.Метод keys является фундаментальной функцией
idb-keyval, обеспечивая быстрый доступ к структуре
хранилища и позволяя реализовать сложные сценарии перебора, фильтрации и
управления данными в IndexedDB.