В библиотеке Idb-keyval операция del
предназначена для удаления конкретной записи из хранилища IndexedDB по
указанному ключу. Эта функция является асинхронной и возвращает
Promise, что позволяет использовать её с
async/await или через
.then()/.catch() для обработки успешного
удаления и ошибок.
import { del } from 'idb-keyval';
// Пример удаления записи с ключом 'user'
await del('user');
В данном примере запись с ключом 'user' будет удалена из
текущей базы данных по умолчанию. Если ключ не существует, операция
завершится успешно, без выброса ошибки.
del(key: IDBValidKey, store?: IDBPObjectStore) => Promise<void>
Параметры:
key – обязательный параметр. Значение
ключа, по которому будет удалена запись. Может быть любого типа, который
поддерживает IndexedDB: строка, число, дата, массив и т.д.store – необязательный параметр.
Позволяет указать пользовательское хранилище
(IDBPObjectStore) вместо использования хранилища по
умолчанию.Возвращаемое значение:
Promise<void> – промис, который разрешается после
успешного удаления или отклоняется в случае ошибки.
Idb-keyval позволяет работать не только с хранилищем по умолчанию, но
и создавать собственные базы данных и хранилища. Для удаления записи из
конкретного хранилища необходимо передать его в функцию
del.
import { Store, del } from 'idb-keyval';
// Создание пользовательского хранилища
const customStore = new Store('my-database', 'my-store');
// Удаление записи с ключом 'session' из пользовательского хранилища
await del('session', customStore);
Использование пользовательских хранилищ обеспечивает изоляцию данных между разными частями приложения и предотвращает конфликты ключей.
Если указанный ключ не найден в базе данных, операция
del не вызывает ошибок. Это позволяет безопасно удалять
записи без предварительной проверки существования ключа:
await del('nonexistent-key'); // не выбрасывает ошибку
Таким образом, del может использоваться в цепочке
операций очистки данных без дополнительных проверок.
Хотя операция del редко вызывает ошибки при корректном
использовании, возможны ситуации, когда IndexedDB недоступен,
заблокирован или повреждён. Для безопасной работы рекомендуется
использовать блок try/catch или методы обработки
промисов:
try {
await del('user');
console.log('Запись успешно удалена');
} catch (error) {
console.error('Ошибка при удалении записи:', error);
}
Аналогичный подход через
.then()/.catch():
del('user')
.then(() => console.log('Удаление прошло успешно'))
.catch(err => console.error('Ошибка:', err));
Операцию del удобно сочетать с get и
set для управления данными в IndexedDB. Например, можно
проверить наличие записи и удалить её только при определённых
условиях:
import { get, del } from 'idb-keyval';
const user = await get('user');
if (user && user.expired) {
await del('user');
}
Такой подход позволяет реализовывать автоматическую очистку устаревших данных и поддерживать актуальность хранилища.
Для удаления нескольких ключей одновременно удобно использовать
Promise.all:
const keys = ['user', 'session', 'settings'];
await Promise.all(keys.map(key => del(key)));
Это обеспечивает параллельное выполнение операций и повышает производительность при работе с большим количеством записей.
del для удаления ненужных данных,
освобождения памяти и предотвращения переполнения IndexedDB.Promise.all.