在reactnative中获取sql查询的结果

wz1wpwve  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(398)

我正在用react native开发一个移动应用程序。我查询一个数据库,然后用“select”请求检索数据。
问题是我不能得到这个请求的结果。我想检索这个请求的结果是将所有元素存储在一个列表变量中
以下是“选择”请求的代码:

  1. listProduct()
  2. {
  3. return new Promise((resolve) =>
  4. {
  5. const db = SQLite.openDatabase('database.db')
  6. db.transaction(
  7. tx => {
  8. tx.executeSql('select * from FRIDGE_PRODUCT', [], (trans, result) => {
  9. let row = result.rows;
  10. resolve(row)
  11. return row
  12. });
  13. }
  14. );
  15. });
  16. }

另一个脚本调用了这个函数:

  1. async function loadproduct() {
  2. let result = await db.listProduct();
  3. return result
  4. }
  5. let row = loadproduct()

问题是,如果我想在控制台中显示row变量,我会得到以下结果:

  1. Promise {
  2. "_40": 0,
  3. "_55": null,
  4. "_65": 0,
  5. "_72": null,
  6. }

如果我直接在函数中打印结果,如下所示:

  1. async function loadproduct() {
  2. let result = await db.listProduct();
  3. console.log(result)
  4. return result
  5. }

我得到了正确的结果:

  1. Object {
  2. "DATE": "10/10/2020",
  3. "IDPRODUCT": 1,
  4. "IMAGEURL": "imageurl",
  5. "PRODUCTNAME": "orange",
  6. }

如何将结果存储在varialbe中?
我试着说:如何获得承诺的价值?但这对我没什么帮助。

0qx6xfy6

0qx6xfy61#

这个 loadproduct 函数是一个异步函数,它返回一个promise对象。这意味着它不会立即完成,你必须等待它完成。当承诺得到解决/完成时,它将返回您的结果。
现在您正在设置 row 变量到promise对象本身,这就是为什么 Promise {something} 在控制台里。
在获得结果之前,javascript必须等待sql查询完成。完成后,它将运行 then 或者 catch 方法,这取决于它是否成功。
您可以等待它完成使用 then() 功能: loadproduct().then(row => doSomethingWithRow(row)) 或者如果已经在异步函数中,可以使用 await 关键字 let row = await loadproduct()

相关问题