Метод entries библиотеки Idb-keyval
предназначен для получения всех пар ключ-значение, которые находятся в
хранилище IndexedDB. Этот метод возвращает итерируемый
объект, который можно использовать в циклах или преобразовать в
массив для дальнейшей обработки.
import { entries } from 'idb-keyval';
async function showEntries() {
for await (const [key, value] of entries()) {
console.log(key, value);
}
}
В примере выше метод entries используется с циклом
for await...of, что позволяет последовательно получать пары
ключ-значение. Это особенно удобно для работы с асинхронными данными,
поскольку entries возвращает асинхронный
итератор.
Асинхронный итератор предоставляет возможность поэтапной загрузки данных из IndexedDB, что важно при работе с большими объёмами информации.
Особенности использования:
[ключ, значение].for await...of гарантирует, что данные
будут обрабатываться по мере их извлечения, без
блокировки основного потока.Пример:
for await (const [key, value] of entries()) {
if (typeof value === 'object') {
console.log(`Объект под ключом ${key}:`, value);
} else {
console.log(`Значение ${key}:`, value);
}
}
Для удобной работы с результатами можно преобразовать асинхронный
итератор в массив, используя Array.from в сочетании с
for await...of или Promise.all.
async function getAllEntries() {
const allEntries = [];
for await (const entry of entries()) {
allEntries.push(entry);
}
return allEntries;
}
getAllEntries().then(console.log);
Альтернативный вариант с Promise.all:
const allEntries = await Promise.all([...entries()]);
console.log(allEntries);
Использование такого подхода позволяет быстро получить полный список всех ключей и значений, чтобы, например, отобразить их в интерфейсе или выполнить массовую обработку.
Асинхронный итератор entries легко комбинировать с
фильтрацией и другими методами обработки данных.
Пример фильтрации по ключу:
for await (const [key, value] of entries()) {
if (key.startsWith('user_')) {
console.log(`Пользовательские данные: ${key} →`, value);
}
}
Пример преобразования значений перед сохранением в другой массив:
const transformed = [];
for await (const [key, value] of entries()) {
transformed.push([key, JSON.stringify(value)]);
}
console.log(transformed);
Метод entries удобно сочетать с:
get и set — для выборочной обработки
данных.del — для удаления ключей, удовлетворяющих определённым
условиям.clear — после анализа всех записей можно решить, какие
удалить полностью.Пример удаления всех устаревших записей:
for await (const [key, value] of entries()) {
if (value.expired) {
await del(key);
}
}
entries эффективно работает даже при большом объёме
данных, так как IndexedDB оптимизирована для асинхронного чтения.for await...of или
Promise.all для корректной работы с асинхронным
итератором.entries с фильтрацией и условиями для
уменьшения объёма обрабатываемых данных.Метод entries предоставляет мощный и гибкий способ
работы с IndexedDB через библиотеку Idb-keyval, обеспечивая
поэтапное получение, фильтрацию и обработку пар
ключ-значение без блокировки интерфейса и с минимальными
затратами ресурсов.