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

async函数链式调用then无返回值无法获取最后调用结果问题咨询

问题排查与修复方案

核心问题点

  • 异步调用链没有正确返回:desprate 函数内部的 getLangID 调用没有加return,导致整个异步流程的结果没有被传递到函数外层,所以打印desprate()只能拿到无有效值的Promise,拿不到最终的容器数据
  • 异步结果没有等待就直接打印:直接对async函数返回的Promise执行console.log,不会输出最终执行结果,需要等待Promise状态变更后再读取结果
  • 异常未捕获:如果数据库查询过程中出现报错,没有catch捕获异常的话,错误会被静默吞掉,也会导致没有预期输出
  • 额外小问题:getLocalvars中直接把传入的container赋值给newcontainer,属于对象引用赋值,会直接修改原container对象,如果不需要修改原对象可以先做浅拷贝

修复后的代码

优先用await写法避免回调嵌套,可读性更高:

var container = { Login: '', sign_up_text: '', forget_password: '', login_button: '' }
var lang = 'de-DE'
var langID = 1

async function getVars (key, lang){
    return db.localization.findOne({
        where: {
            key: key,
            lang: lang
        }
    })
}
async function getLangID (lang){
    return db.localGroups.findOne({ 
        where: { i10s: lang },
        attributes: ['id']
    })
}
async function getLocalvars (container, lang){
    // 如果不需要修改原container可以替换为:var newcontainer = {...container}
    var newcontainer = container
    for (let key in container) {
        console.log(lang)
        const data = await getVars(key, lang)
        newcontainer[data.key] = data.value;
    }
    return newcontainer;
}
async function desprate() {
    const langdata = await getLangID(lang)
    const data = await getLocalvars(container, langdata.id)
    console.log('内部打印结果:', data);
    return data;
}
// 等待异步执行完成后再打印结果,同时添加异常捕获
desprate().then(res => {
    console.log('最终返回结果:', res)
}).catch(err => {
    console.error('执行出错:', err)
})

如果你更习惯用.then链式写法,只需要给desprate里的每一层异步调用都加上return即可:

async function desprate() {
    return getLangID(lang)
        .then(langdata => {
            return getLocalvars(container, langdata.id)
                .then(data => {
                    console.log(data);
                    return data;
                })
        })
}

内容的提问来源于stack exchange,提问作者Limuz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:27:01