Отмена запросов

AbortController

Начиная с версии v0.22.0 Axios поддерживает AbortController для отмены запросов через fetch API:

const controller = new AbortController();

axios.get('/foo/bar', {
   signal: controller.signal
}).then(function(response) {
   //...
});
// отмена запроса
controller.abort()

CancelToken устарел

Вы также можете отменить запрос, используя CancelToken.

API токена отмены axios основан на отозванном cancelable promises proposal.

Этот API устарел с версии v0.22.0 и не должен использоваться для новых проектов

Вы можете создать токен отмены, используя CancelToken.source, как показано ниже:

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 {
    // обработка ошибки
  }
});

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

// отмена запроса (указывать сообщение необязательно)
source.cancel('Operation canceled by the user.');

Вы также можете создать токен отмены, передав функцию-исполнитель конструктору CancelToken:

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // Исполнительная функция (или executor function) получает функцию отмены в качестве параметра
    cancel = c;
  })
});

// отмена запроса
cancel();

Примечание: вы можете отменить несколько запросов с одним и тем же токеном / сигналом отмены.

В течение переходного периода вы можете использовать оба API отмены даже для одного и того же запроса:

const controller = new AbortController();

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

axios.get('/user/12345', {
  cancelToken: source.token,
  signal: controller.signal
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // обработка ошибки
  }
});

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

// отмена запроса (указывать сообщение необязательно)
source.cancel('Operation canceled by the user.');
// ИЛИ
controller.abort(); // параметр сообщения не поддерживается