今天研究了一下同事封装的http请求,用的是promise。然后我就研究了下。

 大结构是:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
 const __fetch = (url, data = {}, config = {}) => {
        let params = Object.assign({}, data);
        config.headers = Object.assign({}, config.headers, { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" });
        config.body = JSON.stringify(params)
        return Promise.race([
            fetch(url, config),  //ES6的fetch方法
            new Promise((resolve, reject) => {
                setTimeout(() => reject({ code: '504', msg: '请求超时' }), config.timeout || 20000)  //处理超时
            })
        ]).then(response => {
            if (response.status != 200) {
                return Promise.reject({ code: response.status, msg: '请求失败' })
            }
            return response.json()
        }, error => {
            if (error && error.code) {
                return Promise.reject(error)
            }
        }).then(response => new Promise((resolve, reject) => {
            if (response & response.code && response.code === '000') {
                resolve(response.data)
            } else {
                reject(response)
            }
        })).catch((e) => {
            if (!e || !e.code) return Promise.reject({ code: '999' })
            if (parseInt(e.code) === 998) return Promise.reject(e)
            return Promise.reject({ code: e.code })
        })
    }
  }  

 const post=(url,data={},config={})=>{
    config.method='POST'
    return __fetch(url,data,config)
 }  

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄