Операция del: удаление записи

В библиотеке 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.
  • Всегда обрабатывать возможные ошибки, особенно в мобильных приложениях, где доступ к IndexedDB может быть ограничен.
  • При работе с пользовательскими хранилищами тщательно планировать структуру базы данных и ключей для упрощения операций удаления.