axios的二次封装为什么还要用promise,axios本身不就是返回promise吗

export function get(url, params){
    return new Promise((resolve, reject) =>{
        axios.get(url, {
            params: params
        }).then(res => {
            resolve(res.data);
        }).catch(err =>{
            reject(err.data)
        })
    });
}

难道这样不可以吗

export function get(url, params){
    return axios.get(url, {
            params: params
        })
}
阅读 8.7k
6 个回答

没发现吗,上面的示例读取了 res.dataerr.data,这样就不用每个请求都写一遍 res = res.data 了。当然,不推荐这么做,应该用 axios 拦截器来实现:

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Do something with response data
    return response;
  }, function (error) {
    // Do something with response error
    return Promise.reject(error);
  });

应该就是单纯为了加一些独特的逻辑吧,比如发生错误时,打印错误在 console 中,集成取消重复请求的功能等等。

当然了,我一直认为,axios 已经足够好用了,再封装一次可能是因为工作不饱和造成的。

可以直接使用返回的数据

.then((res) => {
   第一种写法这里可以直接使用res了 第二种写法res.data才是你要的数据 所以推荐第一种
})
export function get(url, params){
    return axios.get(url, {
            params: params
        }).then(res=>res.data)
          .catch(function(err){throw err.data})
}

结果等价,完全没必要多封装一层

没有必要,原来的已经能包含所有了,不排除使用的人乱用,这种情况见多了

我觉得封装一般有几种原因:

  1. 统一参数结构位置
  2. 请求前置处理
  3. 响应处理

就当前给的代码的话, 做了1 & 3处理
axios.get 和 axios.post 请求接口参数格式是不一样的

更多的时候应该是直接封装成api服务来操作吧!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题