axios 如何统一处理同个类型错误?

发布于 2022-09-05 05:06:22 字数 505 浏览 11 评论 0

// interceptors
axios.interceptors.response.use(function (response) {
    return response;
  }, function (error) {
    // 处理统一的验证失效错误.
    return Promise.reject(error);
  });

// 页面中
axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  }, function (err) {
    // 在此处处理特定业务错误: 
    console.log(err.msg)
    // 问题是: 当我在拦截器里处理了验证失效后, 它还是会执行到这里面
  })

我的问题是: 我在拦截器里处理完验证错误之后, 如何不让页面中单独的业务处理执行 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

深陷 2022-09-12 05:06:22
axios.post(api.checkWithdrawal(), Qs.stringify({
    id:x,
    status:4
}), {}).then((response)=> {
    console.log(response.data)
    this.$message({
        message: '操作成功',
        type: 'success'
    });
    this.accomplishFormVisible=false
    this.getWithdrawalList()
}).catch(error=>{
    this.$message.error(error.data.message)
})

写在catch里面

萌吟 2022-09-12 05:06:22

业务逻辑应该在 then()里面吧?
err 里面处理错误

冷︶言冷语的世界 2022-09-12 05:06:22

在拦截器中,你自己处理异常的部分就不要reject,其余的都return reject,用if else判断下。

深海少女心 2022-09-12 05:06:22

这个问题我们也遇到了,我们的解决思路是在axios外面包装一层

// 创建子类,避免配置污染全局
let axiosIns = axios.create({});

// 设定子类的配置信息
axiosIns.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest'

// 子类的拦截器,对结果是否正常做出判断
axiosIns.interceptors.response.use(function(response){
    let data = response.data;
    let status = response.status;
    if(status===200 || status === 304){
        let rstno = data.rstno;
        if(rstno>0){
            return data;
        }
        return Promise.reject(response);
    }else{
        if(status===412){
            instance.$store.commit('doLogout')
            instance.$router.push({
                path:'/login',
                query:{'redirect':instance.$route.fullPath},
            })
        }
        return Promise.reject(response);
    }
})
let ajaxMethod = ['get','post'];
let api = {};
ajaxMethod.forEach((method)=>{
    api[method] = function(uri,data,config){
        // 对axios包装的一层
        return new Promise(function(resolve,reject){
            axiosIns[method](uri,data,config).then((json)=>{
                // 结果正常,业务逻辑层只需处理后端返回的json
                resolve(json);
            }).catch((response)=>{
                // 拦截器里reject都会走到这里
                console.log(response);
                if(response.status===200 && response.data.rstno<0){
                    instance.$message(response.data.data.err.msg);
                }
            })
        })
    }
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文