Библиотека Idb-keyval предоставляет упрощённый
интерфейс для работы с IndexedDB в браузерах, делая возможным хранение и
получение данных с минимальными усилиями. Метод set
является ключевым для записи данных в хранилище. Он позволяет сохранять
значение по определённому ключу и автоматически обновляет запись, если
ключ уже существует.
import { set } from 'idb-keyval';
await set('username', 'alice');
В этом примере создаётся запись с ключом 'username' и
значением 'alice'. Если запись с этим ключом уже
существовала, её значение будет перезаписано новым.
setМетод set имеет простую сигнатуру:
set(key: IDBValidKey, value: any): Promise<void>
null или undefined.Promise<void>, что позволяет
использовать async/await для обработки завершения
операции.Если необходимо обновить существующую запись, достаточно вызвать
set с тем же ключом:
await set('username', 'bob');
После выполнения этой операции предыдущая запись 'alice'
будет заменена на 'bob'. Важной особенностью является
атомарность записи — операция либо полностью
завершится, либо не произойдёт вовсе, что исключает риск частично
обновлённых данных.
Idb-keyval автоматически сериализует объекты в формат, пригодный для хранения в IndexedDB. Например:
await set('userProfile', { name: 'Alice', age: 25, preferences: { theme: 'dark' } });
При чтении через get будет возвращён полноценный
объект:
import { get } from 'idb-keyval';
const profile = await get('userProfile');
console.log(profile.name); // Alice
Таким образом, set поддерживает хранение любых
структурированных данных, не требуя ручной сериализации в JSON.
Хотя Idb-keyval значительно упрощает работу с IndexedDB, ошибки всё же возможны. Наиболее частые причины:
Пример обработки ошибки:
try {
await set('sessionData', { token: 'abc123' });
} catch (err) {
console.error('Ошибка при записи в IndexedDB:', err);
}
Использование try/catch гарантирует корректное
управление ошибками и предотвращает сбой программы при невозможности
записи.
Idb-keyval гарантирует атомарность операции set. Это
означает, что:
Такой подход упрощает управление состоянием данных и позволяет безопасно обновлять значения без дополнительной логики проверки существования ключа.
setset напрямую,
вместо ручной проверки существования ключа через get.set в try/catch или
использовать .catch() для корректной обработки ошибок
асинхронной записи.Хранение пользовательских настроек:
await set('theme', 'dark');
await set('fontSize', 16);
Кэширование API-ответов:
const data = await fetch('/api/products').then(res => res.json());
await set('productsCache', data);
Сессии и токены авторизации:
await set('authToken', 'xyz-123-token');
В каждом случае set обеспечивает надежную запись данных
с возможностью последующей перезаписи без риска потери информации.