---
title: "Demonstrate how to use IndexedDB with Promises."  
description: "Demonstrate how to use IndexedDB with Promises."  
author: "Jiva Ram"  
published: 2025-06-30  
updated: 2025-06-30  
canonical: https://www.mindstick.com/interview/34295/demonstrate-how-to-use-indexeddb-with-promises  
category: "database"  
tags: ["database", "indexeddb"]  
reading_time: 4 minutes  

---

# Demonstrate how to use IndexedDB with Promises.

Here’s a clean and modern way to use **IndexedDB with Promises**, which makes asynchronous code much easier to read and maintain compared to traditional callback-style.

## IndexedDB with Promises – Full Example

This example shows how to:

- Open a database
- Create an object store (if not exists)
- Add records
- Get all records

### 1. Helper Function: Open Database with Schema Setup

```javascript
function openDatabase(dbName, storeName) {
    return new Promise((resolve, reject) => {
        const request = indexedDB.open(dbName, 1); // version 1

        request.onupgradeneeded = (event) => {
            const db = event.target.result;

            if (!db.objectStoreNames.contains(storeName)) {
                db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
            }
        };

        request.onsuccess = (event) => {
            resolve(event.target.result);
        };

        request.onerror = (event) => {
            reject(`DB open error: ${event.target.errorCode}`);
        };
    });
}
```

### 2. Add a Record

```javascript
function addRecord(db, storeName, data) {
    return new Promise((resolve, reject) => {
        const transaction = db.transaction(storeName, 'readwrite');
        const store = transaction.objectStore(storeName);

        const request = store.add(data);

        request.onsuccess = () => resolve(request.result);
        request.onerror = (event) => reject(`Add error: ${event.target.errorCode}`);
    });
}
```

### 3. Get All Records

```javascript
function getAllRecords(db, storeName) {
    return new Promise((resolve, reject) => {
        const transaction = db.transaction(storeName, 'readonly');
        const store = transaction.objectStore(storeName);

        const request = store.getAll();

        request.onsuccess = () => resolve(request.result);
        request.onerror = (event) => reject(`GetAll error: ${event.target.errorCode}`);
    });
}
```

### 4. Putting It All Together

```javascript
(async () => {
    const dbName = 'MyDB';
    const storeName = 'Users';

    try {
        const db = await openDatabase(dbName, storeName);

        await addRecord(db, storeName, { name: 'Alice', age: 25 });
        await addRecord(db, storeName, { name: 'Bob', age: 30 });

        const users = await getAllRecords(db, storeName);
        console.log('All users:', users);
    } catch (error) {
        console.error('IndexedDB error:', error);
    }
})();
```

## Summary

1. Promises help avoid nested callbacks.
2. You can wrap `indexedDB` operations in Promise-based helpers.
3. Use `async/await` for cleaner code flow.

## Answers

### Answer by Jiva Ram

Here’s a clean and modern way to use **IndexedDB with Promises**, which makes asynchronous code much easier to read and maintain compared to traditional callback-style.

## IndexedDB with Promises – Full Example

This example shows how to:

- Open a database
- Create an object store (if not exists)
- Add records
- Get all records

### 1. Helper Function: Open Database with Schema Setup

```javascript
function openDatabase(dbName, storeName) {
    return new Promise((resolve, reject) => {
        const request = indexedDB.open(dbName, 1); // version 1

        request.onupgradeneeded = (event) => {
            const db = event.target.result;

            if (!db.objectStoreNames.contains(storeName)) {
                db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
            }
        };

        request.onsuccess = (event) => {
            resolve(event.target.result);
        };

        request.onerror = (event) => {
            reject(`DB open error: ${event.target.errorCode}`);
        };
    });
}
```

### 2. Add a Record

```javascript
function addRecord(db, storeName, data) {
    return new Promise((resolve, reject) => {
        const transaction = db.transaction(storeName, 'readwrite');
        const store = transaction.objectStore(storeName);

        const request = store.add(data);

        request.onsuccess = () => resolve(request.result);
        request.onerror = (event) => reject(`Add error: ${event.target.errorCode}`);
    });
}
```

### 3. Get All Records

```javascript
function getAllRecords(db, storeName) {
    return new Promise((resolve, reject) => {
        const transaction = db.transaction(storeName, 'readonly');
        const store = transaction.objectStore(storeName);

        const request = store.getAll();

        request.onsuccess = () => resolve(request.result);
        request.onerror = (event) => reject(`GetAll error: ${event.target.errorCode}`);
    });
}
```

### 4. Putting It All Together

```javascript
(async () => {
    const dbName = 'MyDB';
    const storeName = 'Users';

    try {
        const db = await openDatabase(dbName, storeName);

        await addRecord(db, storeName, { name: 'Alice', age: 25 });
        await addRecord(db, storeName, { name: 'Bob', age: 30 });

        const users = await getAllRecords(db, storeName);
        console.log('All users:', users);
    } catch (error) {
        console.error('IndexedDB error:', error);
    }
})();
```

## Summary

1. Promises help avoid nested callbacks.
2. You can wrap `indexedDB` operations in Promise-based helpers.
3. Use `async/await` for cleaner code flow.


---

Original Source: https://www.mindstick.com/interview/34295/demonstrate-how-to-use-indexeddb-with-promises

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
