Чтение данных из 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, время: 01:52. |