Как прервать axios запрос
Нужно чтобы при получении запроса предыдущий такой же запрос прерывался.Можете посмотреть данный кусок кода и подсказать что не так, что нужно исправить? Буду очень благодарна. Использовала AbortController и CancelToken вместе.
getUsers ({
commit
}, { search }) {
const controller = new AbortController()
const CancelToken = axios.CancelToken
const source = CancelToken.source()
return new Promise((resolve, reject) => {
commit('preloaderStatus')
axios({
url: apiUrl + `/api/users?search=${search}`,
method: 'GET',
cancelToken: source.token,
signal: controller.signal
})
.then(resp => {
commit('preloaderStatus')
resolve(resp)
})
.catch(err => {
commit('preloaderStatus')
reject(err)
})
source.cancel('Operation canceled by the user.')
controller.abort()
})
}
Дело в том что у меня данные совсем перестали грузиться. Нужно ли условие добавить? но в других примерах такого не вижу
Ответы (1 шт):
Надеюсь, что я правильно разобрался: Вы параллельно отправляете запрос и сразу же его отменяете. И к моменту отправки уже стоит флаг отмены запроса, запрос даже никуда не уходит.
Но в консоли можно увидеть ошибку через блок catch.
Что можно сделать:
засуньте отмену запроса в функцию или создайте условие, по которому будет происходить отмена запроса.
в инструментах разработчика, в разделе "Сеть" задайте минимальную скорость подключения - у меня в fire fox это GPRS. При таких условиях запрос будет отправляться достаточно долго, чтоб увидеть его в разделе сеть в консоли разработчика и отменить. Код ниже работает.
http .get('', { signal: controller.signal, }) .then((resp) => { store.setCharacters(resp.data) }) .catch((err) => { console.log(err) }) setTimeout(() => { controller.abort() }, 10)
