我已经设置了一个拦截器来捕获HTTP响应中的错误代码。 当JWT到期时,我从服务器返回了代码401。这是我的拦截器:
this.axios.interceptors.response.use(undefined, (error) => {
if (error.response.status === 401) {
this.$store.dispatch('auth/logout').then(() => {
this.$router.push({name: 'login'})
return Promise.reject(error)
})
}
})
我的拦截器工作正常,除了被拦截的请求仍然解析为.then()部分。
this.axios.get('/texts').then(function(){
// This is still being executed and generates javascript errors because the response doesn't contain the right data
})
从axios文档中,我发现您可以通过调用
来防止这种情况this.axios.get('/texts').then(function(){
// only on success
}).catch(function(){
// only on errors
}).then(function(){
// always executed
})
但这很冗长,我不想在我的应用发出的每个请求中都这样做。
出现错误时,如何防止axios执行.then()回调。我可以在拦截器中做些什么吗?像event.stopPropagation()之类的东西?
答案 0 :(得分:1)
您可以使用以下代码集来防止 Axios 错误
this.axios.interceptors.response.use(undefined, (error) => {
if (error.response.status === 401) {
this.$store.dispatch('auth/logout').then(() => {
this.$router.push({name: 'login'})
return new Promise(() => { });
})
} else {
return Promise.reject(error)
}
})
答案 1 :(得分:0)
您是否在链末尾尝试了catch
?您将得到关注
this.axios.get('/texts').then(function(){
// only on success
}).then(function(){
// only on success in previous then
}).catch(function(){
// executes on every error from `get` and from two previous `then`
})
答案 2 :(得分:0)
从catch块抛出异常以防止'then'块
this.axios.get('/texts').then(function(){
// only on success
}).catch(function(e){
// only on errors
throw e;
}).then(function(){
// Will not executed if there is an error but yes on success
})