我已经设置了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个响应。
对于请求,我假设如果有错误,则该请求将不会发送,并且不会收到响应。这是正确的吗?
答案 0 :(得分:0)
在请求拦截器上,如果您不想等待响应,还需要减小该值。
请求拦截器中的函数将在请求之前被调用。
响应拦截器中的函数将在收到响应后被调用。
也就是说,如果在调用请求拦截器后发生错误,则需要减小该值。 如果在请求拦截器之前发生错误,则无需减少它。
这取决于错误发生的时间。