Прервать все ожидающие запросы axios и создать новый - PullRequest
4 голосов
/ 07 ноября 2019

Я использую axios для запросов API, у меня возникает ситуация, когда я хочу прервать все выполняющиеся / ожидающие запросы и создать новый с другим API.

Попробовал приведенный ниже код

async getOldResponse() {
    const response_old: any = await this.axios.post("/search_old", this.searchData);
    console.log(response_old)
}
async getOldOtherResponse() {
    const response_old_second: any = await this.axios.post("/search_old_second", this.searchData);
    console.log(response_old_second);
}
async getNewSearch() {
    // here i want to cancel all pending requests.
    const CancelToken = this.axios.CancelToken;
    const source = CancelToken.source();
    source.cancel('All previous pending request cancelled');
    const response: any = await this.axios.post("/search_new", this.searchData);
    console.log(response);
}
ngOnInit() {
    this.getOldResponse();
    this.getOldOtherResponse();
    this.getNewSearch();
}

В основном я хочу прервать /search_old & search_old_second запросы API и создать search_new.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Я не уверен в этом, но из того, что я помню, было бы что-то вроде этого.

Взято из документации Axios https://github.com/axios/axios

/* create cancel token */
const CancelToken = this.axios.CancelToken;
const source = CancelToken.source();

/* fire requests whose only purpose is to be canceled */
const response_old: any = await this.axios({
  method: 'post',
  cancelToken: source.token,
  url: '/search_old',
  data: this.searchData
})
const response_old_second: any = await this.axios({
  method: 'post',
  cancelToken: source.token,
  url: '/search_old_second',
  data: this.searchData
})

/* cancel all previous pending requests */
source.cancel('optional message')

/* fire new request */
const response: any = await this.axios.post("/search_new", this.searchData);
0 голосов
/ 07 ноября 2019

Вы можете использовать отмена

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...