我正在用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中?
我试着说:如何获得承诺的价值?但这对我没什么帮助。
1条答案
按热度按时间0qx6xfy61#
这个
loadproduct
函数是一个异步函数,它返回一个promise对象。这意味着它不会立即完成,你必须等待它完成。当承诺得到解决/完成时,它将返回您的结果。现在您正在设置
row
变量到promise对象本身,这就是为什么Promise {something}
在控制台里。在获得结果之前,javascript必须等待sql查询完成。完成后,它将运行
then
或者catch
方法,这取决于它是否成功。您可以等待它完成使用
then()
功能:loadproduct().then(row => doSomethingWithRow(row))
或者如果已经在异步函数中,可以使用await
关键字let row = await loadproduct()