Получение результата от асинхронного запроса
React Native, пробую использовать БД SQlite, хочу при открытие приложения на телефоне подгружать из SQlite в хук как начальный стейт всю базу раннее сохранённых данных, в моём случае приложение Todo List. Проблема в том, что я не могу получить данные из БД, зная что запрос асинхронный с помощью async/await & promise, имею следующий код.
async function getData() {
return await new Promise((resolve, reject) => {
db.transaction(tx => {
tx.executeSql(
'SELECT * FROM test', [],
(_, {rows}) =>
resolve(rows));
},error => {
reject(error);
});
})
}
let result = getData().then(data => result = data);
console.log(result)
Console.log выводит следующее
Promise {
"_U": 0,
"_V": 0,
"_W": null,
"_X": null,
}
Ответы (1 шт):
Автор решения: itmrgodsend
→ Ссылка
Я изучил ещё много информации по этой теме и решил эту проблему самостоятельно, оставлю свой код тут, возможно кому-то будет полезен.
function getData() {
return new Promise((resolve, reject) => {
db.transaction(tx => {
tx.executeSql(
'SELECT * FROM test', [],
(_, {rows}) =>
resolve((rows._array)));
}, error => {
reject(error);
});
})
}
useEffect(() => {
getData().then(data => setTodos(data))
}, []);
const [todos, setTodos] = useState([])
В итоге благодаря useEffect приложение единожды получает данные из Promise и сохраняет его в useState, без конфликтов при дальнейшем использовании.