React native React Native-SQLite事务未等待结果
我想从数据库(profile和config等)获取数据,并在调用下一个函数之前等待数据。我期望,如果我将事务放在一个函数中,在一个异步函数中调用这个函数并等待,这会起作用,但它不会:React native React Native-SQLite事务未等待结果,react-native,sqlite,async-await,React Native,Sqlite,Async Await,我想从数据库(profile和config等)获取数据,并在调用下一个函数之前等待数据。我期望,如果我将事务放在一个函数中,在一个异步函数中调用这个函数并等待,这会起作用,但它不会: function getProfileData() { return db.transaction( tx => { tx.executeSql('SELECT value FROM tbl_config WHERE name="user_email"'
function getProfileData() {
return db.transaction(
tx => {
tx.executeSql('SELECT value FROM tbl_config WHERE name="user_email"', [], (tx, results) => {
console.log(results.rows.item(0).value);
return results.rows.item(0).value;
});
}, null, null);
}
async function fetchData() {
console.log('before fetch')
var res = await getProfileData();
console.log(res);
console.log('after fetch');
}
fetchData();
控制台向我显示函数getProfileData()的结果,但在异步函数中,var res=await getProfileData()未定义
如何一步一步地获取数据?
getProfileData
函数不是异步函数。。。你不能这样做:
await db.transaction(...);
获取事务结果的唯一方法是通过回调,因此您可以执行以下操作:
tx => {
tx.executeSql('SELECT value FROM tbl_config WHERE name="user_email"', [], (tx, results) => {
console.log(results.rows.item(0).value);
const result = results.rows.item(0).value;
this.setState({ result });
});
然后,您可以在代码中的任何位置访问state>result
尝试这种方法
function callback(res){
console.log(res);
console.log('after fetch');
}
function getProfileData() {
return db.transaction(
tx => {
tx.executeSql('SELECT value FROM tbl_config WHERE name="user_email"', [], (tx, results) => {
console.log(results.rows.item(0).value);
callback(results.rows.item(0).value); <!-- Change here -->
});
}, null, null);
}
async function fetchData() {
console.log('before fetch')
await getProfileData();
}
函数回调(res){
控制台日志(res);
log('after fetch');
}
函数getProfileData(){
返回db.transaction(
tx=>{
tx.executeSql('SELECT value FROM tbl_config WHERE name=“user_email”',[],(tx,results)=>{
console.log(results.rows.item(0.value));
回调(results.rows.item(0.value));
});
},空,空);
}
异步函数fetchData(){
console.log('before fetch')
等待getProfileData();
}