Wix Velo调用Promise返回ID时得到[object Promise]如何解决
问题根因
wixData.query().find() 是异步操作,执行时不会立即返回查询结果,所以getID()函数的返回值本质是Promise对象,直接同步打印就会输出[object Promise]。你之前使用await报错是因为await只能在被async关键字标记的函数内部使用,直接在全局同步代码中写await会触发语法错误,另外你原有代码中返回ID的语句被注释了,即使Promise执行完成也拿不到返回值。
修复步骤
1. 修正getID函数,确保返回正确结果
import wixData from 'wix-data'; export async function getID() { try { const results = await wixData.query("Picks") // 你的数据集 .eq("player", "Gary") // 对应字段和匹配值 .find(); if (results.items.length > 0) { const firstItemId = results.items[0]._id; console.log("Return ID: " + firstItemId) $w("#text31").text = firstItemId; return firstItemId; // 放开返回逻辑,抛出ID值 } else { console.log("No Items Found"); return null; } } catch (err) { console.error("查询错误:", err); return null; } }
2. 选择对应方式拿到ID值
方式1:使用.then链式处理(不需要修改外层函数标记)
// 所有依赖ID的逻辑必须写在then的回调内部 getID().then(id => { console.log("Return the ID outside of the function: " + id); // 后续使用ID的业务逻辑写在这里 })
方式2:在async函数内使用await(代码逻辑更清晰)
// 外层函数必须加async标记,以页面加载钩子为例 $w.onReady(async function () { const targetId = await getID(); console.log("Return the ID outside of the function: " + targetId); // 后续使用ID的业务逻辑写在这里 })
注意事项
所有依赖该ID的业务逻辑必须放在异步回调(then内部)或者await语句之后执行,不能在同步代码中直接调用getID()拿返回值,此时异步查询还未执行完成,拿不到最终结果。
内容的提问来源于stack exchange,提问作者xar86413
相关产品推荐
相关产品推荐

