localForage предоставляет метод key, предназначенный для
получения ключа по его числовому индексу внутри текущего хранилища. Этот
метод отражает поведение индексированного списка ключей, который
существует поверх различных драйверов хранения (IndexedDB, WebSQL,
localStorage), приводя их к унифицированной модели.
Метод поддерживает несколько форм вызова:
localforage.key(index);
localforage.key(index, callback);
Также всегда возвращает Promise:
localforage.key(index).then(key => {});
Полная логическая сигнатура:
key(index: number, callback?: (err: any, key: string | null) => void): Promise<string | null>
indexЧисловой индекс ключа в текущем хранилище.
number0Особенность заключается в том, что порядок ключей определяется внутренним механизмом конкретного драйвера:
SELECTЭто означает, что index не следует воспринимать как
устойчивую бизнес-индексацию данных.
callbackФункция обратного вызова (опционально).
(err, key) => voidПараметры callback:
err — ошибка выполнения или nullkey — строковый ключ или null, если индекс
вне диапазонаМетод возвращает:
Promise<string | null>
Поведение Promise:
null, если индекс выходит за пределы
диапазонаМетод key извлекает список всех ключей текущего
хранилища и возвращает ключ, расположенный на позиции
index.
Внутренне процесс можно представить следующим образом:
Однако реальная реализация зависит от драйвера:
Используется курсор объекта хранения. Порядок соответствует сортировке ключей в объектном store.
Выполняется SQL-запрос вида:
SEL ECT key FR OM table
с последующей выборкой строки по индексу.
Используется перечисление свойств объекта localStorage,
что может давать непредсказуемый порядок в зависимости от движка
браузера.
Главная особенность метода заключается в том, что индекс не является стабильным идентификатором:
Поэтому key(index) не следует использовать как основу
для логики, зависящей от постоянного порядка.
При переключении драйвера через конфигурацию:
localforage.setDriver(...)
результаты key(index) могут измениться, так как
изменится внутренняя модель хранения.
Несмотря на простоту операции, метод всегда асинхронный, поскольку унифицированная модель localForage предполагает единый Promise-интерфейс для всех операций, включая синхронные источники вроде localStorage.
Поддержка обратного вызова сохраняется для совместимости:
localforage.key(0, (err, key) => {
if (err) {
console.error(err);
return;
}
console.log(key);
});
В callback-режиме Promise также создаётся, но его можно игнорировать.
Основной рекомендуемый способ:
localforage.key(0)
.then(key => {
console.log('Ключ:', key);
})
.catch(err => {
console.error('Ошибка:', err);
});
Если индекс превышает количество доступных ключей:
nullЭто поведение важно учитывать при итерации:
let i = 0;
while (true) {
const key = await localforage.key(i);
if (key === null) break;
i++;
}
При параллельных операциях:
результаты key(index) могут изменяться между вызовами.
Это особенно важно в асинхронных сценариях, где состояние storage не
фиксировано.
keys()Метод тесно связан с:
localforage.keys()
Разница:
keys() возвращает массив всех ключейkey(index) возвращает один элемент по позицииФактически key можно рассматривать как частный случай
обращения к результату keys().
Эквивалентная логика:
const keys = await localforage.keys();
const key = keys[index] ?? null;
При этом важно учитывать, что метод не предназначен для построения строгих коллекций с фиксированным порядком элементов.