axios 的 interceptors response 异常捕获问题

axios.interceptors.response.use(
    response => {
        if (response.data.code === 'OK') {
            return response
        } else if (response.data.code === 'ERROR') {
            console.log(response.data.data)
            return Promise.reject(response.data)
        }    
    },
    error => {
        ...
    })

然后把 axios 封装了一层

export const Common = {
  axios (url, params) {
    params = params || {}
    return axios.post(url, qs.stringify(params))
  }
}

使用的时候就

Common.axios('/api/a', { a: 1 }).then().catch(e => {})

每次都要捕获异常。这个捕获异常可否统一处理=。=

阅读 11.6k
2 个回答

这个需求还挺奇怪,既然你想在外面接受一个 promise,但是又不想去catch这个promise的reject状态,那么这个promise只能永远返回resolve或者pending,

export const Common = {
      axios(url, params) {
        let _resolve;
        let _reject;
        const p = new Promise((resolve, reject) => {
          _resolve = resolve;
          _reject = reject;
        })
        params = params || {};
        axios.post(url, qs.stringify(params)).then((res) => {
          _resolve(res)
        }).catch(err => {
          params.callback(err); // 你的错误处理
          _resolve(); //resolve掉或者不调用处于pending
        })
        return p;
      }
}
else if (response.data.code === 'ERROR') {
             // 这个里面不能直接干你想干的事情吗
            console.log(response.data.data)
            return Promise.reject(response.data)
        }    
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题