Node.js中Axios封装函数失效问题排查及函数示例需求
问题原因
这是异步操作时序导致的问题:
- Axios的
get请求是异步任务,你封装的函数里,return data会在请求完成前就执行,所以返回的是初始值null,根本拿不到请求后的结果。 - 你原来的代码看似正常,其实如果
data不是全局变量,console.log(data)也会提前输出初始值,只是可能你用了全局变量才碰巧拿到结果。
示例1:返回Promise的封装函数
const Tsingle = url => { return axios.get(url) .then(res => res.data) .catch(err => { console.error('请求失败:', err); return 0; }); }; // 调用方式 Tsingle('testurl').then(data => { console.log(data); });
示例2:使用async/await的封装函数
const Tsingle = async url => { try { const res = await axios.get(url); return res.data; } catch (err) { console.error('请求失败:', err); return 0; } }; // 调用方式1:在async函数内使用await async function fetchData() { const data = await Tsingle('testurl'); console.log(data); } fetchData(); // 调用方式2:直接用then(async函数本身返回Promise) Tsingle('testurl').then(data => console.log(data));
内容的提问来源于stack exchange,提问作者Cihan Sulu
相关产品推荐
相关产品推荐

