Yevhen Klymentiev
dark
light
console
darkness
y.klymentiev@gmail.com
Reusable Snippets|Practical utility code for everyday use — custom-built and ready to share

deleteFromIndexedDB

Deletes a record from an IndexedDB object store by key.

TypeScript
Copied!
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

TypeScript
Copied!
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.

Codebase: Utilities -> Storage -> deleteFromIndexedDB | Yevhen Klymentiev