用axios封装http请求时,怎样做判断自定义状态值成功后对应的操作?

以前在ajax中可以这样处理

request(param){
    $.ajax{
        type: param.type,
        url: param.url,
        success(res){
            if(res.status === 0){
                typeof param.success === 'function' && param.success(res.data)
            }else if(res.status === 1){
                login()        
            }else if(res.status === 2){
                typeof param.success === 'function' && param.success(res.data)
            }
        },
        error(err){
            typeof param.error === 'function' && param.error(res.err)
        }
    }
} 
   

像上面这种情况,比如状态为0表示成功,然后进行成功后的处理,这在axios中怎么处理呢?

阅读 3.6k
5 个回答

可以添加一个响应拦截器

const instance = axios.create()
// 添加一个响应拦截器
instance.interceptors.response.use(response => {
  window.vm.$loading.hide()
  // 在这里对返回的数据进行处理
  let status = response.status
  let data = response.data
  if (status === 200) {
    if (data.code !== '0000') {
      window.vm.$alert({
        msg: data.desc,
        type: 'danger'
      })
    }
    return Promise.resolve(data)
  } else {
    return Promise.reject(response)
  }
}, error => {
  // response error
  console.log(error)
  window.vm.$loading.hide()
  window.vm.$alert({
    msg: '请求异常,请联系管理员!',
    type: 'danger',
    autoClose: false
  })
  return Promise.reject(error)
})
export default instance
async function request(param) {
    let { url, method, success, error } = param
    try {
        let { data, status, error } = await axios({ method, url })
        if (status === 0) {
            typeof success === 'function' && success(data)
        } else if (status === 1) {
            login()
        } else if (status === 2) {
            typeof success === 'function' && success(data)
        }
    } catch (err) {
        typeof error === 'function' && error(err)
    }
}
axios(url, options)
    .then(res => {
        if (res.status === 1) {
            return res.data;
        }
        // 其他类似
    })
    .catch(console.error.bind(console))
http.post = (url, data) => {
  return new Promise((resolve, reject) => {
        axios.post(requestUrl + url, qs.stringify(data),{
          headers: {
              
          }
      }).then(res => {
          if (res.status === 200) {
            resolve (res.data)
          } else {
            alert ('request failed, please try again later')
          }
      })
  })
}; 

是这个意思嘛?

import axios from 'axios'

//请求拦截
axios.interceptors.request.use(function(config){
    ...
    return config
})

//响应拦截
axios.interceptors.response.use(function(config){
    ...    
    return config
})
推荐问题
宣传栏