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

Express/Node.js中await调用getToken返回undefined的原因及解决

问题原因分析

你的代码存在两个核心问题:

  1. getToken函数未返回异步Promise:虽然你将getToken声明为async函数,但内部调用fetch后没有返回这个异步操作生成的Promise对象。async函数若没有显式返回值,会默认返回一个resolve为undefined的Promise,因此await getToken()最终拿到的是undefined。
  2. 异步流程未被正确等待:由于getToken没返回Promise,await无法等待内部fetch的异步操作完成,导致/getAll里的console.log(token)先执行,之后getToken内部的console.log(json)才会触发。
修复方案

以下两种规范的修复方式任选其一即可:

方式一:返回fetch的Promise链

在getToken函数的fetch调用前添加return,让函数返回整个异步流程的Promise:

async function getToken() {
  // 新增return,返回fetch的Promise链
  return fetch("www.example.com", {
    method: "post",
    headers: {
      "Authorization": "Basic " + btoa(userName + ':' + password),
      "Accept": "application/json"
    }
  })
    .then(response => response.json())
    .then(json => {
      console.log(json)
      return { response_code: 200, response: json }
    })
    .catch(err => {
      return { response_code: 500 }
    })
}

方式二:改用async/await语法替代then链

既然已经使用async函数,直接用await处理fetch的异步操作,代码可读性更强:

async function getToken() {
  try {
    const response = await fetch("www.example.com", {
      method: "post",
      headers: {
        "Authorization": "Basic " + btoa(userName + ':' + password),
        "Accept": "application/json"
      }
    });
    const json = await response.json();
    console.log(json);
    return { response_code: 200, response: json };
  } catch (err) {
    return { response_code: 500 };
  }
}

两种方式都能让await getToken()正确等待异步流程完成,并拿到预期的返回值,同时保证代码执行顺序符合预期。

内容的提问来源于stack exchange,提问作者Uzair A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:23:26