如何将axios.post响应保存到变量?解决Promise pending问题
问题解决:获取async函数的实际响应结果
你的问题核心在于async函数的返回值本质是Promise对象,直接调用RequestLogin()得到的是处于pending状态的Promise,而非实际的响应结果。要拿到最终的响应数据,可通过以下两种方法处理:
方法1:使用await(需在async环境中)
由于await只能在async函数内部使用,你可以把代码放在立即执行的异步函数中:
const axios = require('axios'); const RequestLogin = async function () { let auth = { "user_name": "username12l", "password": "password12l", }; // 无需额外await res,因为axios.post已经被await过,直接返回响应对象即可 let res = await axios.post('https://.../api/v1/login', auth); return res; } // 用立即执行异步函数包裹,实现await调用 (async () => { const login = await RequestLogin(); console.log("Login -> ", login); })();
方法2:使用Promise的.then()方法
如果不想用async函数包裹,也可以直接通过Promise的链式调用获取结果:
const axios = require('axios'); const RequestLogin = async function () { let auth = { "user_name": "username12l", "password": "password12l", }; let res = await axios.post('https://.../api/v1/login', auth); return res; } // 通过then链式调用获取最终结果 RequestLogin().then(login => { console.log("Login -> ", login); });
额外说明
- 你的代码中
return await res是多余的,res已经是await axios.post()得到的实际响应对象,直接return res即可。 - 控制台输出的
[AsyncFunction: loginSysaidCookie]是因为你打印了函数本身(console.log("loginSysaidCookie -> ", RequestLogin)),若要查看执行结果,需打印函数调用后的Promise或await处理后的结果。
内容的提问来源于stack exchange,提问作者Edson Luiz dos Santos Junior
相关产品推荐
相关产品推荐

