Метод getItem является базовой операцией чтения данных в
библиотеке localForage и служит для асинхронного извлечения значения по
ключу из выбранного хранилища (IndexedDB, WebSQL или localStorage в
зависимости от окружения и настроек драйвера). Основная особенность
метода заключается в унифицированном API поверх разных механизмов
хранения, что позволяет работать с данными независимо от платформы.
localForage.getItem(key)
Параметры:
key — строка, идентификатор элемента, сохранённого
ранее через setItemВозвращаемое значение:
Promise<any> — промис, который резолвится
значением, связанным с ключомnullПоддерживается также устаревший callback-формат:
localForage.getItem(key, callback)
При вызове getItem происходит обращение к текущему
драйверу хранения. В зависимости от конфигурации localForage:
Метод выполняет чтение асинхронно, даже если внутреннее хранилище синхронное (например, localStorage). Это обеспечивает единообразие работы через Promise API.
localForage.getItem('user').then(function (value) {
console.log(value);
});
Современный вариант с async/await:
async function loadUser() {
const user = await localForage.getItem('user');
console.log(user);
}
Если указанный ключ не существует, результатом будет:
null
Это важное отличие от некоторых низкоуровневых API, где отсутствие
ключа может трактоваться как undefined или ошибка.
localForage сохраняет данные с использованием механизмов сериализации, зависящих от драйвера:
При извлечении данных:
Пример:
await localForage.setItem('config', {
theme: 'dark',
layout: { sidebar: true }
});
const config = await localForage.getItem('config');
getItem всегда асинхронен, даже если физическое
хранилище синхронное. Это приводит к нескольким важным свойствам:
Пример последовательных операций:
localForage.setItem('a', 1);
localForage.getItem('a').then(console.log);
console.log('sync');
Вывод будет:
sync
1
При чтении данных возможны ошибки, связанные с:
Ошибка передаётся в reject-промис:
localForage.getItem('key')
.then(value => {
console.log(value);
})
.catch(err => {
console.error(err);
});
Callback-версия:
localForage.getItem('key', function (err, value) {
if (err) {
console.error(err);
return;
}
console.log(value);
});
Поведение getItem может отличаться в деталях в
зависимости от драйвера:
localForage не добавляет явного кэширования поверх драйвера. Каждый
вызов getItem обращается к хранилищу напрямую. Это важно
учитывать при:
Для оптимизации обычно применяются:
Ключи всегда приводятся к строковому виду. При передаче других типов происходит преобразование:
localForage.getItem(123)
фактически эквивалентно:
localForage.getItem('123')
Это важно при работе с динамически формируемыми идентификаторами.
Несколько одновременных вызовов getItem не блокируют
друг друга:
Promise.all([
localForage.getItem('a'),
localForage.getItem('b'),
localForage.getItem('c')
]).then(console.log);
Каждый запрос выполняется независимо, но фактическая параллельность зависит от драйвера. IndexedDB способен обрабатывать несколько запросов более эффективно, чем localStorage.
getItem часто используется совместно с
setItem. Важно учитывать, что операции записи также
асинхронны:
await localForage.setItem('session', { id: 10 });
const session = await localForage.getItem('session');
Гарантируется, что при корректном await значение будет
доступно после записи.
В браузерах поведение полностью стандартизировано через драйверы localForage. В нестандартных окружениях:
В таких случаях библиотека автоматически переключается на доступный
драйвер, но результат getItem остаётся единообразным по
API.
Чтение пользовательских настроек:
const settings = await localForage.getItem('settings');
Получение кэша данных:
const cache = await localForage.getItem('api_cache_v1');
Загрузка состояния приложения:
const state = await localForage.getItem('app_state');
Если getItem вызывается до завершения установки драйвера
(setDriver или автоматическая инициализация), операция
откладывается до готовности хранилища. Это гарантирует отсутствие
необходимости вручную синхронизировать инициализацию и чтение.
null при отсутствии данных