Отменить запрос на получение в React Native - PullRequest
0 голосов
/ 10 февраля 2020

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

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

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

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

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

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

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

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 Ответ

0 голосов
/ 10 февраля 2020

Попробуйте 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 */
  })
 }
}
...