localforage.setItem(key, value, callback?)
setItem<T = any>(key: string, value: T): Promise<T>;
setItem<T = any>(key: string, value: T, callback: (err: any, value: T) => void): void;
Метод setItem является базовой операцией записи данных в
localForage и используется для сохранения значения по
указанному ключу в выбранное хранилище (IndexedDB, WebSQL или
localStorage — в зависимости от доступности и конфигурации
драйвера).
key: string
Ключ, под которым сохраняется значение.
Особенности:
"User" и "user" —
разные ключи).value: any
Значение, которое необходимо сохранить.
Поддерживаемые типы:
string, number,
boolean, null);Date, Blob, ArrayBuffer (в
зависимости от драйвера);Внутренне localForage выполняет сериализацию данных
(обычно через structured clone алгоритм или JSON fallback в зависимости
от драйвера).
Ограничения:
callback?: (err, value) => void
Необязательный параметр обратного вызова.
Поведение:
Важно:
Promise<T>
Promise резолвится в сохранённое значение.
Особенности:
Date).Если ключ уже существует:
localforage.setItem('token', 'abc');
localforage.setItem('token', 'def');
старое значение полностью заменяется без возможности частичного обновления.
Все операции строго асинхронны независимо от драйвера:
Это гарантирует единообразное API.
Операция записи считается атомарной на уровне драйвера:
QuotaExceededError
localStorage и некоторых конфигураций
IndexedDB.SerializationError
InvalidArgumentsError
TransactionError
IndexedDB
WebSQL
localStorage
Перед записью данные проходят преобразование:
При чтении (getItem) выполняется обратная
десериализация.
await localforage.setItem('profile', {
name: 'Alex',
age: 30,
preferences: {
theme: 'dark'
}
});
При повторной записи:
await localforage.setItem('profile', {
name: 'Alex',
age: 31
});
предыдущее значение не объединяется, а заменяется полностью.
В TypeScript setItem часто используется с
дженериками:
interface User {
id: number;
name: string;
}
await localforage.setItem<User>('user', {
id: 1,
name: 'John'
});
Это позволяет:
Promise<T>;При параллельных вызовах:
localforage.setItem('counter', 1);
localforage.setItem('counter', 2);
итоговое значение зависит от порядка завершения промисов, а не от порядка вызова.
Это важно учитывать при:
Факторы влияния:
IndexedDB показывает лучшую масштабируемость при:
localStorage становится узким местом при частых операциях записи из-за синхронной природы базового API.
Если ни один драйвер недоступен: