Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.09.2017, 14:34
Новичок на форуме
Отправить личное сообщение для Dmi3z Посмотреть профиль Найти все сообщения от Dmi3z
 
Регистрация: 25.09.2017
Сообщений: 1

Чтение данных из 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 ни перебор по индексам не работают.
Заранее благодарен за помощь, и просьба сильно не чмырить)
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2017, 07:59
Аватар для maxminimus
Аспирант
Отправить личное сообщение для maxminimus Посмотреть профиль Найти все сообщения от maxminimus
 
Регистрация: 16.06.2016
Сообщений: 30

используй localForage
Ответить с цитированием
  #3 (permalink)  
Старый 10.08.2018, 13:49
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Dmi3z,
Потому что IndexedDB асинхронный
Ответить с цитированием
  #4 (permalink)  
Старый 06.01.2019, 21:22
Новичок на форуме
Отправить личное сообщение для Gustly Посмотреть профиль Найти все сообщения от Gustly
 
Регистрация: 06.01.2019
Сообщений: 1

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();

Последний раз редактировалось Gustly, 11.01.2019 в 10:37.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение данных из файла в массив TheSingleElk Общие вопросы Javascript 2 16.06.2016 01:09
Чтение данных из Excel при загрузке страницы paulsk Общие вопросы Javascript 3 09.01.2015 13:46
Сохранение и чтение данных в javascript mexoboy Общие вопросы Javascript 2 10.01.2013 15:48
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00
чтение данных в IE nikolaich ExtJS 2 11.01.2011 12:33