You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:31:50