如何在React Native中使用Promise获取SQLite数据库事务的结果?

时间:2019-12-21 17:54:58

标签: javascript reactjs react-native expo

我正在尝试检查SQLite数据库中的表是否已经存在。 有人可以告诉我我如何保证获得结果价值?

let tableCount = 0;

db.transaction(transaction =>
  transaction.executeSql(
    "SELECT name FROM sqlite_master WHERE type='table' AND name='methods';",
    [],
    (_, result) => {
      console.log(result.rows.length);
      tableCount = result.rows.length;
    },
    (err) => console.log("error")
  )
);

console.log(tableCount + "TEST");

所以我的问题是第二个console.log在第一个console.log之前执行,它仍然显示值0。

2 个答案:

答案 0 :(得分:0)

我认为目前其结果为0,有两种方法:

async fetchData() {
  let tableCount = 0;

  await db.transaction(transaction =>
    transaction.executeSql(
      "SELECT name FROM sqlite_master WHERE type='table' AND name='methods';",
      [],
      (_, result) => {
        console.log(result.rows.length);
        tableCount = result.rows.length;
      },
      (err) => console.log("error")
    )
  );
  console.log(tableCount + "TEST");
}

或者您可以使用返回的承诺:

let tableCount = 0;

db.transaction(transaction =>
  transaction.executeSql(
    "SELECT name FROM sqlite_master WHERE type='table' AND name='methods';",
    [],
    (_, result) => {
      console.log(result.rows.length);
      tableCount = result.rows.length;
    },
    (err) => console.log("error")
  )
).then(() => {
  console.log(tableCount + "TEST");
});

希望有帮助

答案 1 :(得分:0)

感谢您的回答。我找到了一种方法来解决此问题,方法是根据数据库事务处理的结果将我想执行的代码放入结果回调中。