Полная сигнатура clear

Метод clear() предназначен для полного удаления всех записей из текущего хранилища, управляемого экземпляром localForage. Это операция уровня «очистить всё пространство ключ–значение», которая затрагивает только выбранный драйвер и namespace (если он задан через config), не влияя на другие экземпляры и их области хранения.


Полная сигнатура clear()

Метод реализован в нескольких совместимых формах, отражающих эволюцию API и поддержку различных моделей асинхронности:

Promise-ориентированная сигнатура

clear(): Promise<void>
  • Возвращаемое значение: Promise, который завершается без значения (void)
  • Ошибка: отклонённый Promise в случае сбоя удаления данных

Callback-ориентированная сигнатура (legacy)

clear(callback: (err: Error | null) => void): void
  • callback вызывается после завершения операции
  • err содержит объект ошибки или null при успешном выполнении

TypeScript-эквивалент

clear(): Promise<void>;
clear(callback: (err: Error | null) => void): void;

Поведение метода

Метод clear() выполняет полную очистку всех ключей в рамках:

  • текущего экземпляра localForage
  • выбранного драйвера хранения (IndexedDB, WebSQL или localStorage)
  • текущего storeName (если используется конфигурация)

Важно: область действия

clear() не является глобальной операцией браузера. Он работает строго в рамках:

  • storeName (namespace таблицы/объекта)
  • выбранной конфигурации экземпляра

Пример изоляции:

const storeA = localforage.createInstance({ name: 'A' });
const storeB = localforage.createInstance({ name: 'B' });

storeA.clear(); // очищает только A

Асинхронная модель выполнения

clear() всегда асинхронен вне зависимости от драйвера:

IndexedDB

  • выполняется через транзакцию readwrite
  • использует objectStore.clear()
  • атомарен внутри транзакции

WebSQL

  • выполняет SQL-команду:

    DELETE FROM store

localStorage

  • перебирает ключи и удаляет их по одному:

    localStorage.removeItem(key)

Возвращаемое значение и семантика завершения

При использовании Promise:

await store.clear();
  • undefined не возвращается
  • успешное выполнение означает, что хранилище полностью очищено
  • любые последующие getItem по старым ключам вернут null

Ошибки и исключения

Метод может завершиться ошибкой в следующих случаях:

1. Проблемы с доступом к хранилищу

  • приватный режим браузера с ограничениями
  • отключённый IndexedDB

2. Ошибки транзакции (IndexedDB)

  • блокировка базы данных
  • конфликт параллельных транзакций

3. Квоты и ограничения среды

  • редкие случаи повреждения storage backend

Пример обработки:

store.clear().catch((err) => {
  console.error('Ошибка очистки:', err);
});

Поведение при конкурентном доступе

Если параллельно выполняются операции:

  • setItem
  • removeItem
  • clear

возможны следующие сценарии:

IndexedDB

  • clear() создаёт транзакцию, которая:

    • блокирует store на время выполнения
    • может «перебить» параллельные записи

localStorage

  • операции синхронные, но localForage эмулирует асинхронность
  • возможны гонки при одновременных вызовах

Влияние на итерацию данных

После clear():

await store.clear();
await store.length(); // 0

Также:

await store.keys(); // []
await store.iterate(() => {}) // не выполнится

Отличие от removeItem

Операция Поведение
removeItem удаляет один ключ
clear удаляет все ключи

clear() эквивалентен множественным removeItem, но выполняется более эффективно за счёт нативных возможностей драйвера (особенно IndexedDB).


Производительность

IndexedDB

  • O(1) операция через objectStore.clear()
  • максимально эффективный вариант

WebSQL

  • зависит от размера таблицы
  • выполняется как массовый SQL delete

localStorage

  • O(n), так как требуется перебор ключей
  • на больших объёмах может быть заметная задержка

Особенности реализации внутри localForage

Внутренняя логика:

  1. Определение активного драйвера
  2. Делегирование операции адаптеру
  3. Выполнение нативной операции очистки
  4. Синхронизация состояния промиса

Абстракция обеспечивает единое поведение:

store.clear()
  → driver.clear()
  → Promise resolution

Сценарии использования

Полная сброска состояния приложения

await localforage.clear();

Очистка кэша конкретного модуля

const cache = localforage.createInstance({
  name: 'cache'
});

await cache.clear();

Пересоздание пользовательской сессии

await sessionStore.clear();

Поведение при отсутствии данных

Если хранилище уже пустое:

await store.clear();
  • ошибка не возникает
  • операция завершается успешно
  • состояние остаётся пустым

Взаимодействие с конфигурацией

Метод учитывает:

  • name
  • storeName
  • driver

Пример:

localforage.config({
  name: 'app',
  storeName: 'user_data'
});

clear() удалит только данные из user_data, не затрагивая другие store внутри app.


Влияние на кэшированные драйверы

При смене драйвера:

localforage.setDriver([
  localforage.INDEXEDDB,
  localforage.LOCALSTORAGE
]);

clear() работает только с активным драйвером, не очищая потенциальные данные в fallback-слое до его активации.


Особенности поведения в разных окружениях

Браузеры

  • полностью поддерживается
  • IndexedDB предпочтителен

WebView (мобильные приложения)

  • возможны ограничения WebSQL
  • localStorage fallback менее стабилен

Private mode

  • может выбрасывать ошибки или работать в memory-only режиме

Согласованность данных

После вызова:

await store.clear();

гарантируется:

  • отсутствие старых ключей
  • невозможность восстановления через API localForage
  • немедленная консистентность для последующих операций чтения