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

为何基于Promise的Axios请求返回Promise对象而非预期数据?

问题解决:async函数返回Promise而非预期数据的处理

核心原因

  1. async函数的本质:所有async函数默认返回Promise对象,无论内部是否使用await。直接调用fetchApi()得到的是未完成状态的Promise,而非最终解析后的数据。
  2. 日志顺序问题:console.log("returned response:", response)是同步代码,会在axios的异步HTTP请求完成前执行,因此先打印Promise { <pending> },待请求完成后才会执行.then里的日志。

修复方案

方案1:用async/await包裹调用(推荐)

将调用逻辑放在异步函数中,用await等待Promise解析:

const axios = require("axios");

async function fetchApi() {
  // 去掉冗余的.then,用await直接处理响应
  const response = await axios.get("https://api.publicapis.org/entries");
  console.log("logged response:", response.data.count);
  return response.data.count;
};

// 立即执行异步函数处理调用
(async () => {
  const response = await fetchApi();
  console.log("returned response:", response);
})();

方案2:用.then处理Promise

通过Promise的.then方法获取解析后的数据:

const axios = require("axios");

async function fetchApi() {
  const response = await axios.get("https://api.publicapis.org/entries");
  console.log("logged response:", response.data.count);
  return response.data.count;
};

// 用.then接收异步结果
fetchApi().then(response => {
  console.log("returned response:", response);
});

额外说明

  • 原代码中同时使用await和.then属于冗余写法,二选一即可,纯await写法更符合现代异步代码的可读性要求。
  • HTTP请求本身是异步操作,无法通过同步函数直接返回结果,强行改为同步会阻塞Node.js事件循环,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:36:17