【问题标题】:React Native - SQLite transaction is not waiting for resultReact Native - SQLite 事务不等待结果
【发布时间】:2021-02-21 07:32:59
【问题描述】:

我想从数据库(配置文件和配置等)中获取数据并在调用下一个函数之前等待数据。我期待,如果我把事务放在一个函数中,在异步函数中调用这个函数并等待,这会起作用,但它不会:

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() 未定义。

如何逐步获取数据?

【问题讨论】:

    标签: react-native sqlite async-await


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      试试这个方法

      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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多