Axios - Предотвратить .then () от выполнения ошибок http - PullRequest
0 голосов
/ 19 ноября 2018

Моя проблема:

Я установил перехватчик для перехвата кодов ошибок в ответах 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 () или что-то в этом роде?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Бросить исключение из блока 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
})
0 голосов
/ 19 ноября 2018

Вы пробовали 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`
})
...