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

async/await+axios返回Pending Promise及.then返回undefined问题咨询

咱们一步步来解决你的两个问题哈:

第一个问题:为什么会返回Promise {<pending>}?怎么拿到响应数据?

你写的getCalcInfo是个async函数,所有async函数的返回值默认都是Promise对象——哪怕你内部写了return resultData,这个值也会被自动包装成一个resolved状态的Promise。所以你在main.js里直接赋值const calcInfo = calc.getCalcInfo();时,拿到的是还在等待请求完成的pending状态Promise,自然打不出数据。

解决办法有两种,选你习惯的就行:

方法1:用async/await(代码更清爽,推荐)

把main.js的逻辑放到一个async函数里,用await等待Promise完成:

// main.js
const calc = require('./calc');

async function run() {
  const calcInfo = await calc.getCalcInfo();
  console.log('calcInfo:', calcInfo);
}

run();

这样代码会等axios请求拿到响应后,再执行打印,就能看到你想要的数据了。

方法2:用Promise的.then()链式调用

如果不想用async/await,也可以用Promise的then方法处理结果:

// main.js
const calc = require('./calc');

calc.getCalcInfo().then(calcInfo => {
  console.log('calcInfo:', calcInfo);
});

当请求完成、Promise变成fulfilled状态时,then里的回调就会拿到响应数据。


第二个问题:修改后为什么返回undefined?

你修改后的getCalcInfo函数里,虽然调用了axios.post(),但你没把axios返回的Promise给return出去!axios.post本身是异步操作,会返回一个Promise,但你的函数内部只是执行了这个调用,却没有把这个Promise返回,所以函数默认返回undefined。

只需要加个return就行:

// calc.js
const getCalcInfo = () => {
  // 把axios的调用结果return出去
  return axios.post('/api/logis/getCalcInfo', {})
  .then((result) => {
    return result;
  });
}

另外小补充:其实.then()里的return result可以省略,因为axios.post的then会自动把结果传递下去,直接写成return axios.post('/api/logis/getCalcInfo', {})就够了,效果完全一样。

现在你再调用getCalcInfo(),拿到的就是axios返回的Promise,之后用await或者.then()就能拿到响应数据啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:27:42