async函数queryDB返回[object Promise]无法获取数据库查询计数问题求助
问题根因
- 所有
async关键字修饰的函数默认返回值都是Promise对象,你的原有代码存在两个问题:一是queryDB函数没有显式返回异步查询的计数结果,二是调用queryDB的时候没有等待异步操作执行完成,直接打印了返回的Promise实例本身。 - 你遇到的输出顺序也验证了异步逻辑的执行特性:外部的同步打印逻辑早于异步数据库查询回调执行,所以先输出
[object Promise],后输出函数内部的正确计数值。
修复方案
第一步:修改queryDB函数,统一异步写法并显式返回结果
async function queryDB(num) { try { const results = await wixData.query("numDB") .eq("nums", num) .find() const count = results.items.length console.log("count in function: " + count) return count } catch (err) { console.error("查询出错:", err) // 可根据业务需求调整出错时的返回值,也可以直接抛出错误 return 0 } }
第二步:修改调用逻辑,等待异步操作完成后再取值
可以选择await写法,代码更直观:
$w.onReady(async function () { var num1 = await queryDB("1"); console.log("count out function: " + num1) });
也可以选择.then回调写法:
$w.onReady(function () { queryDB("1").then(num1 => { console.log("count out function: " + num1) }) });
内容的提问来源于stack exchange,提问作者user16942308
相关产品推荐
相关产品推荐

