Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Чтение данных из IndexedDb (https://javascript.ru/forum/misc/70686-chtenie-dannykh-iz-indexeddb.html)

Dmi3z 25.09.2017 14:34

Чтение данных из IndexedDb
 
Люди добрые, помогите. Третий день ломаю голову.
На клиенте есть БД IndexedDb.
При попытке чтения построчно с помощью cursor, console.log выдает объекты, которые хранятся в соответствующих полях БД. Но эти объекты не получается налету записать в массив. На выходе получаю весь набор объектов в массиве, но массив их не видит (array.length = 0);
testMethod() {
      let temp = [];
      const db = indexedDB.open("EPG");
      db.onsuccess = (event) => {
        let target = event.target.result;
        let tx = target.transaction(["channel"]).objectStore("channel").openCursor();
        tx.onsuccess = (event) => {
          let cursor = event.target.result;
          if(cursor){
              temp.push(cursor.value);            
            cursor.continue();
          }
        }
    } 

      return temp;
  }


В массиве temp на выходе получаю весь нужный список объектов, но массив как будто пустой, ни foreach ни перебор по индексам не работают.
Заранее благодарен за помощь, и просьба сильно не чмырить)

maxminimus 26.09.2017 07:59

используй localForage

Teamur 10.08.2018 13:49

Dmi3z,
Потому что IndexedDB асинхронный

Gustly 06.01.2019 21:22

async testMethod() {
  let temp = [];
  return await new Promise(resolve => {
    const db = indexedDB.open("EPG");
    db.onsuccess = (event) => {
      let target = event.target.result;
      let tx = target.transaction(["channel"]).objectStore("channel").openCursor();
      tx.onsuccess = (event) => {
        let cursor = event.target.result;
        if (cursor) {
          temp.push(cursor.value);
          cursor.continue();
        } else {
          resolve(temp);
        }
      }
    }
  });
}

var myArr = await testMethod();


Часовой пояс GMT +3, время: 09:04.