Axios拦截器的错误处理程序何时被调用?

时间:2018-11-02 12:27:39

标签: javascript promise axios es6-promise

我已经设置了axios拦截器,目的是在任何请求未收到响应时将全局加载变量设置为true。在我的应用程序中,这将阻止用户提交表单,这在很多情况下都可能会导致错误,因为尚未处理所有数据。

代码是:

var numberOfAjaxCAllPending = 0;
// Add a request interceptor
window.axios.interceptors.request.use(function (config) {
    numberOfAjaxCAllPending++;
    console.log('Request:  ---- ' + numberOfAjaxCAllPending);
    return config;
}, function (error) {
    return Promise.reject(error);
});

// Add a response interceptor
window.axios.interceptors.response.use(function (response) {
    numberOfAjaxCAllPending--;
    console.log('Pending Response (response): ---- ' + numberOfAjaxCAllPending);
    return response;
}, function (error) {
    numberOfAjaxCAllPending--;
    console.log('Pending Response (error): ---- ' + numberOfAjaxCAllPending);
    return Promise.reject(error);
});

global.loading = numberOfAjaxCAllPending > 0;

当发出请求时,待处理的计数器将递增,而响应以其递减的形式返回。大于0的值表示请求仍在等待处理。

我对这些承诺的错误部分有些困惑。我必须将递减减量添加到响应错误中,以便它可以捕获非200个响应。

对于请求,我假设如果有错误,则该请求将不会发送,并且不会收到响应。这是正确的吗?

1 个答案:

答案 0 :(得分:0)

在请求拦截器上,如果您不想等待响应,还需要减小该值。

请求拦截器中的函数将在请求之前被调用。

响应拦截器中的函数将在收到响应后被调用。

也就是说,如果在调用请求拦截器后发生错误,则需要减小该值。 如果在请求拦截器之前发生错误,则无需减少它。

这取决于错误发生的时间。