在reactnative中获取sql查询的结果

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

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

listProduct()
{
    return new Promise((resolve) => 
    {   
        const db = SQLite.openDatabase('database.db')
        db.transaction(
            tx => {
              tx.executeSql('select * from FRIDGE_PRODUCT', [], (trans, result) => {
                let row = result.rows;
                resolve(row)
                return row
              });
            }
          );
    });  
}

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

async function loadproduct() {
    let result = await db.listProduct();
    return result
}

let row = loadproduct()

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

Promise {
  "_40": 0,
  "_55": null,
  "_65": 0,
  "_72": null,
}

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

async function loadproduct() {
  let result = await db.listProduct();
  console.log(result)
  return result
}

我得到了正确的结果:

Object {
  "DATE": "10/10/2020",
  "IDPRODUCT": 1,
  "IMAGEURL": "imageurl",
  "PRODUCTNAME": "orange",
}

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

0qx6xfy6

0qx6xfy61#

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

相关问题