Node.js中async/await与Promise结合时返回值undefined问题
问题原因及解决办法
核心原因
你的doDbCall函数没有返回有效结果:
- 虽然在
client.query的.then()回调里return dbRes,但这个return仅作用于当前回调函数,不会向上传递给doDbCall本身。 doDbCall作为async函数,默认会返回一个resolve为undefined的Promise,所以testTheDb中await后得到的自然是undefined。- 另外你在
async函数里混合使用await和.then(),这种写法会打乱Promise的链式传递逻辑,加剧返回值丢失的问题。
修正方案
推荐统一使用await写法,逻辑更清晰:
async function doDbCall(queryString) { await client.connect(); const dbRes = await client.query(queryString); console.log("dbDoCall - dbRes", dbRes.rows[0]); return dbRes; // 这里的return会作为async函数Promise的resolve值 }
如果坚持用.then()链式调用,需要确保返回整个Promise链:
function doDbCall(queryString) { return client.connect() .then(() => client.query(queryString)) .then(dbRes => { console.log("dbDoCall - dbRes", dbRes.rows[0]); return dbRes; }); }
修正后,testTheDb中的myReturnVal就能正确获取到数据库查询结果了。
内容的提问来源于stack exchange,提问作者Targaryen
相关产品推荐
相关产品推荐

