然后调用Axios 400错误请求而不是catch

50l*_*l3r 2 javascript ajax vue.js axios

我有这个功能:

add(App, Params, Callback){
    var self = this;

    var Data = self.process_fields(Params)

    self.$http.post(
        paths.api + '/app/' + App.Permalink,
        new URLSearchParams(Data)
    ).then(function (error, response) {
        console.log("then");
        if (typeof (Callback) == "function") {
            Callback(true, response.data.data);
        }
    }).catch(function(error){
        console.log("catch");
        if(typeof error.response !== "undefined"){
            errors.render(error.response.data.error)
        }

        if (typeof (Callback) == "function") {
            Callback(false, null);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

当我致电request并收到400错误时,它致电,而不是catch:

在此处输入图片说明

50l*_*l3r 9

我找到了解决方案

由axios拦截器中的不返回promise引起的问题:

axios.interceptors.response.use((response) => {
    return response;
}, (error) => {
    if (!error.response) {
        alert('NETWORK ERROR')
    } else {
        const code = error.response.status
        const response = error.response.data
        const originalRequest = error.config;

        if (code === 401 && !originalRequest._retry) {
            originalRequest._retry = true

            auth.commit('logout');
            window.location.href = "/login";
        }

        return Promise.reject(error)
    }
});
Run Code Online (Sandbox Code Playgroud)

增添return Promise.reject(error)魅力


小智 5

这是旧版本 Axios 有意为之的。

validateStatus自 v0.11 起已添加到配置中。我们可以使用此选项来指定有效的状态代码范围。默认情况下,有效代码为 >= 200 且 < 300。

validateStatus: function (status) {
  return status >= 200 && status < 300; // default
},
Run Code Online (Sandbox Code Playgroud)

参考: https: //github.com/axios/axios/issues/41#issuecomment-215100137