deleteFromIndexedDB
Deletes a record from an IndexedDB object store by key.
1/**
2 * Deletes a record from an IndexedDB object store by key.
3 *
4 * @param db - The open IDBDatabase instance.
5 * @param storeName - The name of the object store.
6 * @param key - The key of the record to delete.
7 * @returns A Promise that resolves when the deletion is complete.
8 */
9export function deleteFromIndexedDB(
10 db: IDBDatabase,
11 storeName: string,
12 key: IDBValidKey
13): Promise<void> {
14 return new Promise((resolve, reject) => {
15 const transaction = db.transaction([storeName], 'readwrite');
16 const store = transaction.objectStore(storeName);
17 const request = store.delete(key);
18
19 request.onsuccess = () => resolve();
20 request.onerror = () => reject(request.error);
21 });
22}
Clean Asynchronous Interface
Uses Promises for clean,
async/await-friendly
interaction with the IndexedDB API.Targeted Deletion
Deletes a single record by key, minimizing unintended data loss.
Transactional Safety
Executes within a
readwrite
transaction, ensuring atomicity and consistency.Error Forwarding
Exposes precise errors via
request.error
, aiding in debugging and error reporting.
Tests | Examples
1import { openIndexedDB } from './openIndexedDB';
2import { addToIndexedDB } from './addToIndexedDB';
3import { getFromIndexedDB } from './getFromIndexedDB';
4
5test('deleteFromIndexedDB - deletes an existing record', async () => {
6 const db = await openIndexedDB('TestDB_Delete', 1, {
7 upgrade(db) {
8 if (!db.objectStoreNames.contains('items')) {
9 db.createObjectStore('items', { keyPath: 'id' });
10 }
11 }
12 });
13
14 await addToIndexedDB(db, 'items', { id: 42, name: 'To be deleted' });
15
16 await deleteFromIndexedDB(db, 'items', 42);
17
18 const deleted = await getFromIndexedDB(db, 'items', 42);
19 expect(deleted).toBeUndefined();
20
21 db.close();
22});
23
24test('deleteFromIndexedDB - no error on non-existent key', async () => {
25 const db = await openIndexedDB('TestDB_DeleteNoError', 1, {
26 upgrade(db) {
27 db.createObjectStore('logs', { keyPath: 'id' });
28 }
29 });
30
31 await expect(
32 deleteFromIndexedDB(db, 'logs', 999)
33 ).resolves.toBeUndefined();
34
35 db.close();
36});
Common Use Cases
Removing Obsolete Entries
Delete expired cache records or stale session data.
User-Initiated Deletions
Remove items when a user deletes a note, file, or item from a list.
Record Replacement
Delete old entries before inserting updated ones with a new structure or schema.
Selective Data Clearing
Trim IndexedDB size by pruning individual records without wiping the store.
Undo Functionality
Support undo actions by deleting a record that was just added or modified.