Метод keys() предназначен для получения списка всех ключей, которые хранятся в текущем экземпляре localForage. Результатом работы метода является массив строк, содержащий имена всех сохранённых записей.
Этот метод особенно полезен в ситуациях, когда структура хранилища заранее неизвестна или требуется динамически получить перечень всех сохранённых элементов.
Сигнатура метода выглядит следующим образом:
localforage.keys()
Метод возвращает объект Promise.
После успешного выполнения Promise возвращает массив ключей:
[
"user",
"settings",
"cart",
"theme"
]
Пример:
localforage.keys()
.then(function(keys) {
console.log(keys);
});
Результат:
["user", "settings", "cart", "theme"]
При использовании конструкции async/await:
async function showKeys() {
const keys = await localforage.keys();
console.log(keys);
}
localForage хранит данные в виде пар:
ключ → значение
Например:
await localforage.setItem("user", {
name: "Alex"
});
await localforage.setItem("theme", "dark");
await localforage.setItem("language", "ru");
После сохранения трёх записей вызов:
const keys = await localforage.keys();
вернёт:
[
"user",
"theme",
"language"
]
При этом значения не загружаются. Метод получает только имена записей.
Классический вариант использования:
localforage.keys()
.then(function(keys) {
keys.forEach(function(key) {
console.log(key);
});
})
.catch(function(err) {
console.error(err);
});
В консоли:
user
theme
language
Современный синтаксис делает код более читаемым:
async function printKeys() {
try {
const keys = await localforage.keys();
for (const key of keys) {
console.log(key);
}
} catch (error) {
console.error(error);
}
}
Метод keys() может использоваться для определения того, пусто ли хранилище.
Пример:
const keys = await localforage.keys();
if (keys.length === 0) {
console.log("Хранилище пустое");
}
Если записи существуют:
if (keys.length > 0) {
console.log("Данные найдены");
}
Хотя для этого существует специальный метод length(), иногда число записей вычисляют через keys():
const keys = await localforage.keys();
console.log(keys.length);
Например:
[
"user",
"settings",
"theme"
]
Количество:
3
Однако при необходимости получить только число элементов предпочтительнее использовать метод length(), поскольку он выполняет задачу более эффективно.
Часто возникает необходимость не только получить ключи, но и извлечь соответствующие значения.
Пример:
const keys = await localforage.keys();
for (const key of keys) {
const value = await localforage.getItem(key);
console.log(key, value);
}
Результат:
user {name: "Alex"}
theme dark
language ru
Такой подход позволяет построить собственный механизм обхода хранилища.
Иногда требуется собрать данные в единый массив.
Пример:
const keys = await localforage.keys();
const result = [];
for (const key of keys) {
const value = await localforage.getItem(key);
result.push({
key,
value
});
}
console.log(result);
Результат:
[
{
key: "user",
value: {
name: "Alex"
}
},
{
key: "theme",
value: "dark"
}
]
Метод keys() часто применяется для экспорта содержимого локального хранилища.
Пример:
async function exportStorage() {
const keys = await localforage.keys();
const backup = {};
for (const key of keys) {
backup[key] = await localforage.getItem(key);
}
return backup;
}
Возможный результат:
{
user: {
name: "Alex"
},
theme: "dark",
language: "ru"
}
После этого объект можно сериализовать:
const data = await exportStorage();
const json = JSON.stringify(data);
Метод keys() возвращает полный список ключей, который затем можно фильтровать.
Предположим, данные пользователей имеют префикс:
await localforage.setItem("user_1", {});
await localforage.setItem("user_2", {});
await localforage.setItem("user_3", {});
await localforage.setItem("settings", {});
Получение только пользовательских записей:
const keys = await localforage.keys();
const userKeys = keys.filter(key =>
key.startsWith("user_")
);
console.log(userKeys);
Результат:
[
"user_1",
"user_2",
"user_3"
]
Распространённой практикой является использование пространств имён внутри ключей.
Пример:
await localforage.setItem("product:101", {});
await localforage.setItem("product:102", {});
await localforage.setItem("product:103", {});
await localforage.setItem("user:1", {});
Фильтрация:
const keys = await localforage.keys();
const products = keys.filter(key =>
key.startsWith("product:")
);
Результат:
[
"product:101",
"product:102",
"product:103"
]
Поскольку keys() возвращает массив, можно использовать стандартные методы JavaScript.
Например:
const keys = await localforage.keys();
const lastKey = keys[keys.length - 1];
console.log(lastKey);
Однако важно понимать, что порядок ключей зависит от используемого драйвера хранения и не должен восприниматься как гарантированный механизм сортировки.
Если используются отдельные экземпляры хранилища, keys() работает только внутри конкретного экземпляра.
Создание двух хранилищ:
const usersStore = localforage.createInstance({
name: "app",
storeName: "users"
});
const productsStore = localforage.createInstance({
name: "app",
storeName: "products"
});
Сохранение данных:
await usersStore.setItem("user1", {});
await usersStore.setItem("user2", {});
await productsStore.setItem("product1", {});
Получение ключей:
const userKeys = await usersStore.keys();
const productKeys = await productsStore.keys();
Результат:
userKeys
// ["user1", "user2"]
productKeys
// ["product1"]
Каждый экземпляр работает со своим набором данных.
Если в базе нет записей:
await localforage.clear();
то вызов:
const keys = await localforage.keys();
console.log(keys);
вернёт:
[]
Ошибка при этом не возникает.
Хотя метод обычно работает надёжно, Promise может быть отклонён при проблемах с драйвером хранения или доступом к базе данных.
Пример обработки:
try {
const keys = await localforage.keys();
console.log(keys);
} catch (error) {
console.error("Ошибка получения ключей:", error);
}
Метод keys() возвращает полный список ключей хранилища.
Для небольших объёмов данных операция выполняется практически мгновенно:
const keys = await localforage.keys();
Однако при тысячах и десятках тысяч записей необходимо учитывать, что:
Если требуется обработка большого количества записей, более эффективным решением может быть использование метода iterate(), который позволяет обходить данные по одной записи без формирования полного массива ключей.
Возвращает:
[
"user",
"theme",
"settings"
]
Пример:
const keys = await localforage.keys();
Подходит для:
Позволяет сразу работать с содержимым:
await localforage.iterate((value, key) => {
console.log(key, value);
});
Подходит для:
Метод keys() возвращает массив всех ключей текущего хранилища localForage, работает асинхронно и предоставляет результат через Promise. Метод не загружает значения записей, а получает только их идентификаторы, что делает его удобным инструментом для анализа структуры хранилища, фильтрации данных, построения резервных копий и организации последующей загрузки нужных объектов.