【问题标题】:When does an Axios interceptor's error handler get called?什么时候调用 Axios 拦截器的错误处理程序?
【发布时间】:2019-04-06 16:50:06
【问题描述】:

我设置了一个 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 响应。

对于请求,我假设如果有错误,那么请求将不会发送,我不会期待响应。这是正确的吗?

【问题讨论】:

    标签: javascript promise axios es6-promise


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 1970-01-01
      • 2022-11-20
      • 2020-11-28
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      相关资源
      最近更新 更多