Операция clear: полная очистка хранилища

Библиотека Idb-keyval предоставляет простой и удобный интерфейс для работы с IndexedDB в браузере. Одной из ключевых возможностей является метод clear, предназначенный для полной очистки выбранного хранилища данных. В отличие от удаления отдельных ключей через delete, clear удаляет все записи целиком, освобождая память и гарантируя отсутствие оставшихся данных.


Синтаксис метода clear

import { clear } from 'idb-keyval';

clear([store]).then(() => {
    console.log('Хранилище очищено');
}).catch(err => {
    console.error('Ошибка при очистке хранилища:', err);
});

Параметры:

  • store (необязательный) – объект хранилища IndexedDB, который нужно очистить. Если не передан, используется хранилище по умолчанию.

Возвращаемое значение: Метод возвращает Promise, который разрешается после успешного удаления всех записей. В случае ошибки Promise отклоняется с объектом ошибки.


Использование по умолчанию

Когда хранилище не передаётся явно, метод clear работает с хранилищем по умолчанию. Это упрощает код для типичных случаев, когда нет необходимости создавать отдельные базы данных или хранилища.

import { set, clear } from 'idb-keyval';

// Добавление данных
set('user', { name: 'Alex', age: 28 });
set('theme', 'dark');

// Очистка всех данных
clear().then(() => console.log('Все записи удалены'));

После выполнения clear все ключи и значения в хранилище будут удалены, и любые попытки получить данные вернут undefined.


Очистка конкретного хранилища

Idb-keyval позволяет работать с несколькими хранилищами, используя объект Store. Для очистки конкретного хранилища необходимо создать экземпляр Store и передать его в clear.

import { Store, set, clear } from 'idb-keyval';

const customStore = new Store('my-database', 'my-store');

// Добавление данных в пользовательское хранилище
set('session', 'xyz123', customStore);
set('token', 'abcd', customStore);

// Очистка конкретного хранилища
clear(customStore).then(() => console.log('Пользовательское хранилище очищено'));

Такой подход позволяет безопасно управлять данными в нескольких независимых хранилищах внутри одного приложения.


Важные особенности clear

  1. Асинхронность Метод работает асинхронно через Promise. Это значит, что операция может быть отложена до момента, когда база данных станет доступна, особенно при больших объёмах данных.

  2. Полная очистка clear удаляет все записи, включая ключи и значения. Это не фильтрация по префиксу или диапазону, а именно полное очищение хранилища.

  3. Безопасность и обработка ошибок Возможны ошибки, связанные с блокировкой базы данных или проблемами доступа. Рекомендуется всегда использовать catch для обработки таких случаев:

clear(customStore)
    .then(() => console.log('Очищено'))
    .catch(err => console.error('Не удалось очистить хранилище:', err));
  1. Воздействие на производительность Для больших хранилищ clear может потребовать значительного времени, так как IndexedDB выполняет удаление всех объектов в транзакции. В отличие от удаления отдельных ключей по одному, clear выполняется быстрее и эффективнее для массовой очистки.

Практические сценарии применения

  • Сброс пользовательских данных: удаление всех настроек при выходе из приложения.
  • Очистка кэша: удаление устаревших данных локального кэша перед загрузкой новой версии.
  • Тестирование и отладка: быстрое удаление всех записей без необходимости вручную перебивать ключи.

Рекомендации по использованию

  • Использовать clear только когда действительно требуется удалить все данные хранилища.
  • Для выборочной очистки ключей лучше применять метод delete, чтобы сохранить нужные данные.
  • Всегда обрабатывать возможные ошибки через catch, особенно при работе с нестандартными хранилищами или в многопоточной среде.

Метод clear является мощным инструментом для управления локальными данными, обеспечивая быстрый и надёжный способ полностью очистить хранилище в Idb-keyval без сложных операций. Его правильное применение позволяет создавать чистые и предсказуемые состояния приложений на стороне клиента.