1

axios返回的就是一个promise对象 为什么有很多人还是会promise再封装一次呢?
例如:

export function get (url, data = {}) {
  return new Promise((resolve, reject) => {
    axios.get(url, {params: data})
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
}
2018-12-12 提问
6 个回答
0

已采纳

我对你问题理解的重点是封装:不需要封装axios,拿来直接用即可。
所以我的答案:每个项目有很多接口,需要写很多重复的东西,比如接口的验签,接口信息错误拦截统一处理等等
是一定要封装的

但如果你想问的是为什么要promise@eson_li的回答就很好了

下面是我的封装,注释的地方就是封装的理由,抛砖引玉,大佬多批评

const Axios = function (obj, loading = true, toast = true) {
    // 查看接口请求到响应完成时间
    console.time(obj.url) 
    // 请求接口时的loading效果
    if (loading) {
        this.$Indicator.open()
        loading = false
    }
    let headers = {}
    // 签名
    if (!/^https:\/\/|http:\/\//.test(obj.url)) {
        const token = util.cookies.get("token");
        let timestamp = obj.timestamp || parseInt(+new Date() / 1000);
        headers = {
            "timestamp": timestamp,
            "signature": sign(obj.data || {}, timestamp),
            "token": token
        }
    }
    return new Promise((response, reject) => {
        // 默认post,
        let method = obj.method || "post";
        service({
                url: obj.url,
                method: method,
                data: obj.data || {},
                headers: headers
            })
            .then(({ data }) => {
                this.$Indicator.close()
                console.timeEnd(obj.url)
                // 与后端定义:code为0表示接口按预期返回
                if (data.code !== 0 && toast) {
                    this.$Toast(data.message);
                    console.error(data)
                }
                // code等于3表示token失效需要重新登陆
                if (data.code === 3) {
                    util.project.login()
                    response(data);
                    return
                }
                response(data);
            })
            .catch(rej => {
                this.$Indicator.close()
                reject(rej);
            });
    });
};
3

可以增加js引擎gc负担,为将来向甲方要钱预留优化空间
还增加了冗余代码,可以减少代码可读性增加维护难度,让公司轻易不敢炒自己鱿鱼

0

借用别人的回答:因为axios的响应信息里面不止包含了response body ,还包含了其他信息。但是我们大多数情况下只关心 response body的内容。

0

我的理解:是否对axios进行封装,这是根据公司业务需求而定的。大多数都会进行二次封装,增加项目的可维护性;统一标准,代码标准化。

0

1、我觉得这种写法根本就是多余的,根本没了解axios的用法,不管你要怎么样接收或者发送数据都可以通过拦截器处理

axios拦截器使用

2、对于公司业务根本不可能这么封装,完全会在外面再写个类,和promise没有关系,本身axios就是一个promise,本身就符合标准

0

我不会的时候也是这么瞎写的

撰写答案

推广链接