Чтение данных из 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 ни перебор по индексам не работают. Заранее благодарен за помощь, и просьба сильно не чмырить) |
используй localForage
|
Dmi3z,
Потому что IndexedDB асинхронный |
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, время: 20:47. |