如何在Node.js中将Axios GET请求的响应存储为JSON?
解决Axios请求返回Promise { }的问题
核心原因
async 函数执行后必然返回一个 Promise 对象,你直接将函数赋值给变量并立即打印时,Promise还处于未完成(pending)状态,所以会输出Promise { <pending> }。另外你的代码混用了await和.then(),写法冗余且容易造成逻辑混乱。
修正方案
1. 优化函数内部逻辑(去掉冗余的.then())
直接用await接收Axios的响应结果,无需额外嵌套.then(),代码更简洁清晰:
const { default: axios } = require("axios"); async function getAvgPrice() { try { // 直接通过await获取响应对象 const response = await axios.get("https://api.com/example.json"); console.log(response); // 返回API返回的JSON数据(通常在response.data中) return response.data; } catch (error) { // 捕获请求失败的异常,避免程序崩溃 console.error("请求出错:", error); return null; } }
2. 正确获取函数的返回结果
有两种合法方式获取async函数的最终返回值:
方式一:在async环境中使用await调用
// 必须在async函数内使用await async function run() { const result = await getAvgPrice(); console.log(result); // 这里会输出正确的JSON响应数据 } run();
方式二:用.then()处理Promise回调
getAvgPrice().then(result => { console.log(result); // 这里会输出正确的JSON响应数据 }).catch(error => { console.error("处理失败:", error); });
额外提示
- 如果你需要将响应存入数组,直接在函数内创建数组并push即可,但注意
response.data才是API返回的纯JSON数据,response是Axios封装的完整响应对象(包含状态码、请求头等信息)。 - 永远不要忽略错误处理,网络请求随时可能失败,
try/catch或.catch()能避免未捕获异常导致程序终止。
内容的提问来源于stack exchange,提问作者LanSsd Sdftytgk
相关产品推荐
相关产品推荐

