axios异常处理问题

Vue项目,采用的axios做数据提交。axios做的全局拦截

先上代码:

axios.interceptors.request.use(config => {
  if (!filterPermission(config.method, config.url)) { // 路由权限校验
    return Promise.reject({ message: NO_PERMISSION_MSG })
  }
  return config
}, error => {
  return Promise.reject(error)
})
axios.interceptors.response.use(response => {
  return response
}, error => {
  console.log('error', error)
  message.error(error.message || '请求出错,请稍后重试!')
  return Promise.reject(error)
})
export default {
  // 普通post方法
  post(url, data = {}, customConfig = {}) {
    return axios(Object.assign({
      method: 'post', // 请求协议
      url: url, // 请求地址
      data: JSON.stringify(data), // post 请求参数
      timeout: ajaxTimeout, // 超时时间
      headers: {
        'Content-Type': 'application/json; charset=UTF-8'
      }
    }, customConfig)).then(checkStatus).catch(err => {
      console.log('err', err)
      // return { data: {}}
      return Promise.reject(err)
    })
  }
}

现在问题就出在最后的axios方法的catch里面,这个catch里面返回Promise.reject()是会在页面报错说是Uncaught (in promise);
如果直接return false会在页面调用的时候返回数据;

this.$http.post(URL_MANAGE_USERlIST, this.query).then(res => {
    console.log('这里会接收到res的数据,只是数据为空')
 })

我的本来想法是axios在拦截到错误信息后就直接提示错误,并不再继续执行下去。
能不能有什么办法在catch里面在执行return Promise.reject(err)时不会再控制台上面报错

阅读 8.7k
3 个回答

return Promise.reject(err) 为什么要加这句呢?
这句创建了一个新的Promise并且决议状态为拒绝,后面没有reject函数处理这个决议值,所以就报错啦。既然后面啥都不想处理,不要这句就得了。

好像是多写了,控制台不想打印把console.error都去掉

在使用axios做数据请求拦截时,一定要注意,在err位置,要使用Promise.resolve(),表示为成功完成态。

axios.interceptors.response.use(() => {}, err => {
    // 错误异常处理
    return Promise.resolve(err)
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题