Массив функций Dexie startupWithIgnoreCase() не определен

Я запрашиваю базу данных dexie с помощью startWithIgnoreCase и помещаю результат в массив, но при печати или использовании он выдает ошибку как неопределенную

Я пытался использовать JSON.stringify, toString, String, чтобы преобразовать его в строку и распечатать на консоли, но все равно показывает undefined

При выводе всего массива на консоль с отображением обычного массива ()

arr = [];
db.table('friends').where('name').startsWithIgnoreCase('DoB/')
                    .each(function (friend) {
                        arr.push(String(friend.name));
                    });
console.log(arr[0]); //undefined 
console.log(arr); //Array() with correct element inside

Я должен хотя бы что-то напечатать, когда использую console.log(arr[0])


person xyz xyz    schedule 31.10.2019    source источник
comment
конечно, вы не можете видеть arr[0] в console.log(), потому что запросы к базе данных всегда асинхронны. Попробуйте обернуть ваш запрос в обещание или асинхронно/ожидание   -  person Babak Abadkheir    schedule 31.10.2019
comment
Извините, если это глупо спрашивать, но (новичок в javascript) я помещаю элемент внутри массива, который отображается правильно. когда я использую console.log(arr) print, показываю правильный элемент внутри массива, но console.log(arr[0]) нет   -  person xyz xyz    schedule 31.10.2019
comment
ты можешь показать мне, как я могу это сделать   -  person xyz xyz    schedule 31.10.2019
comment
Консоль лениво оценивает массив, поэтому вы видите, что массив полный, но arr[0] там нет. console.log(JSON.stringify(JSON.parse(arr))), поэтому вы записываете копию того, что находится в arr в этот момент, и вы увидите, что она пуста.   -  person VLAZ    schedule 31.10.2019


Ответы (1)


вызов данных из базы данных является чем-то асинхронным, и javascript не ждет вас, пока ваша задача не будет выполнена, если вы не сказали об этом. используйте async/await в своем запросе. что-то вроде этого:

async myControllerFunction()=>{
    arr = [];
    let firends = await db.table('friends').where('name').startsWithIgnoreCase('DoB/')
        .each(function (friend) {
            arr.push(String(friend.name));
        });
    console.log(arr[0]);
    console.log(arr);
}
person Babak Abadkheir    schedule 31.10.2019