Метод removeItem в библиотеке localForage предназначен
для асинхронного удаления значения по ключу из выбранного хранилища. Он
абстрагирует различия между IndexedDB, WebSQL и localStorage,
предоставляя единый Promise-ориентированный интерфейс.
removeItem(key): Promise<void>
В контексте экземпляра:
localforage.removeItem(key)
или при использовании изолированного хранилища:
const store = localforage.createInstance({
name: 'appDB',
storeName: 'cache'
});
store.removeItem(key)
Тип: String
Ключ, по которому хранится значение в локальном хранилище. Может быть любым строковым идентификатором, допустимым для выбранного драйвера.
Особенности ключа:
Метод возвращает:
Promise<void>
Promise всегда приводит к состоянию:
Важно: отсутствие ключа не считается ошибкой и не вызывает reject.
При использовании IndexedDB:
objectStore.delete(key)Особенность: IndexedDB гарантирует атомарность операции удаления в пределах транзакции.
В WebSQL:
Выполняется SQL-запрос вида:
DELETE FR OM store WH ERE key = ?Удаление синхронизируется через транзакции SQLite-подобного уровня
Поведение идентично IndexedDB: отсутствие записи не вызывает ошибки
В localStorage:
localStorage.removeItem(key)При использовании memory driver:
Удаление происходит из JavaScript-объекта
Эквивалент:
delete store[key]Данные исчезают после перезагрузки страницы
import localforage from "localforage";
localforage.setItem("sessionToken", "abc123")
.then(() => localforage.removeItem("sessionToken"))
.then(() => console.log("Удалено"))
.catch(err => console.error("Ошибка:", err));
removeItem всегда асинхронен, даже если текущий драйвер
использует синхронное хранилище.
Это означает:
then
или awaitПример с async/await:
async function clearCache() {
await localforage.removeItem("cacheData");
}
Если ключ уже удалён:
await localforage.removeItem("nonExistingKey");
результат:
Это делает метод идемпотентным, что важно для устойчивой логики очистки данных.
Метод removeItem работает в рамках текущей конфигурации
экземпляра:
localforage.config({
name: "MyApp",
storeName: "users"
});
или:
const usersStore = localforage.createInstance({
name: "MyApp",
storeName: "users"
});
Удаление происходит только внутри указанного storeName,
даже если ключ существует в другом хранилище.
Promise может быть отклонён в следующих случаях:
Пример обработки:
localforage.removeItem("data")
.catch(err => {
console.error("Ошибка удаления:", err);
});
Логика метода внутри localForage примерно соответствует:
function removeItem(key) {
return new Promise((resolve, reject) => {
driver.removeItem(key, (err) => {
if (err) reject(err);
else resolve();
});
});
}
На уровне IndexedDB это транслируется в:
transaction.objectStore(storeName).delete(key);
При множественных вызовах:
Promise.all([
localforage.removeItem("a"),
localforage.removeItem("b"),
localforage.removeItem("c")
]);
операции выполняются независимо и не блокируют друг друга, но фактическая параллельность зависит от драйвера:
removeItem влияет только на один ключ и не
затрагивает:
Однако при использовании составных ключей логика приложения может требовать дополнительной очистки зависимых данных вручную.
await localforage.removeItem("authToken");
await localforage.removeItem("refreshToken");
async function invalidateUser(userId) {
await localforage.removeItem(`user:${userId}`);
}
Иногда используется как этап перед обновлением:
await localforage.removeItem("profile");
await localforage.setItem("profile", newProfileData);
Удаление через removeItem принципиально отличается от
записи null:
removeItem удаляет ключ полностьюsetItem(key, null) сохраняет ключ со значением
nullЭто различие критично при проверке существования:
await localforage.setItem("a", null);
await localforage.getItem("a"); // null, но ключ существует
await localforage.removeItem("a");
await localforage.getItem("a"); // null (как отсутствие значения)
При одновременном выполнении:
setItem(key, value)removeItem(key)финальный результат зависит от порядка завершения транзакций драйвера, особенно в IndexedDB.
Типичный сценарий:
Это требует осторожности при конкурентной записи и удалении одного ключа.
Поэтому производительность removeItem зависит от
драйвера и размера данных, но всегда линейна или близка к O(1) для
IndexedDB.