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

Axios异步调用函数返回值无法正确回传,console打印undefined问题求助

问题根因

你遇到的返回undefined问题完全来自async函数的返回值缺失和异步等待逻辑错误,具体有2个核心问题:

  • 自定义的getPartnerDetails、getRawJson两个async函数均没有显式返回处理结果,async函数无return语句时默认返回undefined,这是最直接的原因
  • 同时混用await和.then()语法导致逻辑嵌套混乱,内部异步调用完成后没有将结果逐层向上传递,局部catch只打印错误没有向外抛出,也会导致异常场景下的返回值异常
修正后的完整代码
// 第三方API请求统一配置可提前抽离,避免重复写
const BASE_HOST = 'https://host.com/im/account/consumer'
const headers = {
  // 你原来的公共header配置放这里
}

app.post('/checkuser', async (req, res, next) => {
  try {
    const { man, bfn, bln, bsn, bc, bs, bz, bco } = req.body;
    const bodyContent = {
      man, bfn, bln, bsn, bc, bs, bz, bco,
      profile: 'DEFAULT',
    };

    // 第一步:获取mtid
    const firstRes = await axios.post(`${BASE_HOST}`, bodyContent, { headers });
    const addressValidResult = firstRes.data.score.etr.filter(
      result => result.test === '19:2'
    )[0];
    const requestId = firstRes.data.mtid;

    // 第二步:获取最终结果
    const currentValidAddress = await getPartnerDetails(requestId);
    
    // 统一返回
    console.log('this is currentvalidaddress ', currentValidAddress);
    res.json({
      validationMessage: addressValidResult,
      currentValidAddress
    });
  } catch (err) {
    next(err);
  }
});

async function getPartnerDetails(appId) {
  const config = {
    headers: {
      'Content-Type': 'application/json',
      Authorization: 'Basic M2QzMsdfsslkfglkdjfglkdjflkgd',
    },
    params: { partner: 19 },
  };
  const partnerRes = await axios.get(`${BASE_HOST}/${appId}/partner/requests`, config);
  const requestId = partnerRes.data.requests[0].request_id;
  console.log('this is request id ', requestId);
  // 等待getRawJson返回结果后再return,把结果传递到上层
  const rawResult = await getRawJson(appId, requestId);
  return rawResult;
}

async function getRawJson(appId, requestId) {
  const rawRes = await axios.get(`${BASE_HOST}/${appId}/partner/request/${requestId}`, { headers });
  console.log('this is getRawJson result ', rawRes.data);
  // 这里如果不需要序列化可以直接return rawRes.data,根据你的业务需求调整
  return JSON.stringify(rawRes.data);
}
关于是否拆分入口的建议

不建议拆分为3个独立入口,原因如下:

  • 服务端聚合请求可以大幅降低客户端逻辑复杂度,客户端只需要发起1次请求等待结果即可,不需要处理链式调用的异常、超时等问题
  • 第三方API的鉴权密钥可以完全保留在服务端,不会暴露给客户端带来安全风险
  • 方便服务端统一做请求缓存、降级、限流等处理,也可以灵活调整第三方API的调用逻辑,不需要客户端发版配合
    只有当三个步骤有独立的业务复用需求,或者后续步骤需要用户在客户端做人工选择干预时,才需要拆分为独立入口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:36:00