Как сделать asyn c вызов после использования ax ios .CancelToken? - PullRequest
1 голос
/ 17 апреля 2020

Я создаю React Native приложение. Мой компонент API содержит асинхронный вызов c, который я хочу остановить. Для этой цели я использую axios.CancelToken:.

const source = axios.CancelToken.source();


 async getProductCategoriesRequest() {
    try {
      let response = await catalog.get(`category`, {
        cancelToken: source.token,
      });
      return response.data;
    } catch (error) {
      if (axios.isCancel(error)) {
        console.log(error)
        return Promise.reject();
      } 
    }
  }

Из моего компонента я вызываю requestCancellationHandler на onPress:

 const requestCancellationHandler = () => {
    source.cancel('API request is being canceled');
    props.resetState();
  };

Все работает отлично, кроме как я не могу сделать еще один звонок, если я не перезагрузить приложение. Я продолжаю получать Cancel {message: "API request is being canceled"} в запросе API Catch. Простая перезагрузка страницы позволяет мне сделать еще один асин c вызов

Как я могу решить эту проблему без перезагрузки?

1 Ответ

0 голосов
/ 17 апреля 2020

Я думаю, что второй пример в Ax ios документы будет полезен.

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // An executor function receives a cancel function as a parameter
    cancel = c;
  })
});

// cancel the request
cancel();

В вашем случае,

let source;

 async getProductCategoriesRequest() {
    source = axios.CancelToken.source();
    try {
      let response = await catalog.get(`category`, {
        cancelToken: source.token,
      });
      return response.data;
    } catch (error) {
      if (axios.isCancel(error)) {
        console.log(error)
        return Promise.reject();
      } 
    }
  }

и

 const requestCancellationHandler = () => {
    source.cancel('API request is being canceled');
    props.resetState();
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...