Я полностью прочитал Google и эти 2 предыдущих вопроса о переполнении стека, но как новичок я все еще не получаю ожидаемый результат
Как мне вернуть ответ от асинхронного вызова?
Как преобразовать существующий API обратного вызова в обещания?
В частности, один из приведенных выше ответов говорит
"ES2017 +: обещания с асинхронностью/ await
В версии ECMAScript, выпущенной в 2017 году, появилась поддержка асинхронных функций на уровне синтаксиса. С помощью async и await вы можете писать асинхронно в «синхронном стиле». Код по-прежнему асинхронный, но этолегче читать / понимать. "
... так что это направление, в котором я пошел, используя async / await
У меня есть кнопка на собственной странице реакции, которая запускает этот код
onPressRefreshButton = async () => {
const rows = await ReturnAllRowsFromTable('NameOfTable')
console.log(rows)
}
Эта функция находится в импортированном файле, внешнем по отношению к описанному выше, она возвращает список всех строк в таблице
export async function ReturnAllRowsFromTable(tableName){
db.transaction(tx => {
tx.executeSql(
'SELECT * FROM ' + tableName + ';',
[],
(tx, results) => {
if (results && results.rows && results.rows._array) {
console.log('all rows returned')
console.log(results.rows.item(0))
return await results.rows._array
}
},
(tx, error) => {
console.log(error);
}
)
});
}
Когда я нажимаю кнопку, я получаю следующееng в консоли
undefined
all rows returned
Object {
"key": "value",
"key2": "value",
}
Таким образом, кажется, что строка console.log(rows)
выполняется перед строкой const rows = await ReturnAllRowsFromTable('NameOfTable')
, хотя у меня есть асинхронные / ожидающие вызовы во всех функциях.
Что я сделал не так?