Отменить запрос на получение в React Native

У меня есть приложение React-Native с магазином Redux. У меня есть запрос на выборку и я хочу установить таймаут, если запрос на выборку становится длинным и показывает сообщение об ошибке.

Мой вопрос: как можно установить тайм-аут и отменить запрос? Потому что в противном случае запрос может быть успешным после того, как появится сообщение об ошибке и отобразится ответ и успешное сообщение.

В RN 0.60 есть AbortController, но как использовать его с хранилищем с избыточностью? Или есть другой способ с булевым флагом? Redux Docs говорит:

Один из способов сделать это - создать функцию, которую вы возвращаете от создателей ваших действий. Затем запускайте только действие «успех», пока эта функция не вызывается.

У вас есть пример для этого?

Я не могу показать весь код, но я пытаюсь объяснить.

Мое действие имеет этот метод:

export function fetchData(type, id) {
 return (dispatch, state) => {
  return fetch(APIURL, {
   method: 'GET',
   headers: headers
  })
  .then /*handle Response and response errors */
 }
}

И я вызываю функцию в моем компоненте:

<Dialog
 action={async => 
{async () => {
  try {
    await this.props.fetchMyData();
    await openUrlInBrowser(URL);
  } catch (e) {
    this.showError();
  }
}}>

function mapDispatchToProps(dispatch: ThunkDispatch){
 fetchMyData: () => {
  return dispatch(fetchData("data"));
 }
}

Спасибо вам за помощь!

Всего 1 ответ


Попробуйте https://github.com/benestudio/fetch/tree/feature/timeout

  • npm установить whatwg-fetch-timeout --save

и добавьте таймаут для запроса:

export function fetchData(type, id) {
 return (dispatch, state) => {
  return fetch(APIURL, {
   method: 'GET',
   headers: headers,
   timeout: 500, /* milisecond */
  })
 }
}

Есть идеи?

10000