Почему мой код не ожидает выполнения асинхронной операции?

Как исправить код JavaScript для добавления данных в IndexedDB, чтобы правильно обрабатывать промисы и избежать завершения работы после первой итерации добавления данных?
  • 31 мая 2024 г. 17:51
Ответы на вопрос 2
Ваш код не ожидает выполнения асинхронной операции, потому что вы не правильно используете промисы или не дожидаетесь их выполнения.

Для того, чтобы исправить код и правильно обрабатывать асинхронные операции в IndexedDB, можно использовать async/await или цепочку then/catch для обработки промисов.

Пример исправленного кода с использованием async/await:

```javascript
async function addDataToIndexedDB(data) {
  const db = await indexedDB.open('myDatabase', 1);
  db.onupgradeneeded = function() {
    const store = db.result.createObjectStore('myStore', { keyPath: 'id' });
  };

  const transaction = db.transaction(['myStore'], 'readwrite');
  const objectStore = transaction.objectStore('myStore');

  for (let i = 0; i < data.length; i++) {
    await new Promise((resolve, reject) => {
      const request = objectStore.add(data[i]);
      
      request.onsuccess = function() {
        resolve();
      };
      
      request.onerror = function() {
        reject(request.error);
      };
    });
  }

  console.log('All data added successfully');
}
```

В этом примере мы создали асинхронную функцию `addDataToIndexedDB`, которая ожидает выполнения промисов при добавлении данных в IndexedDB. Теперь код будет добавлять все данные поочередно и дожидаться завершения каждой операции перед переходом к следующей.
я бы логировал внутри description.get, есть подозрение, что resolve не вызывается
Похожие вопросы