как обработать ошибку запроса сети? - PullRequest
0 голосов
/ 12 февраля 2019

моя проблема отличается от React Native fetch () Сбой сетевого запроса , я не борюсь с http или https, я просто хочу предоставить пользователю хорошую ошибку, если запрос не удалсяиз-за подключения к Интернету, неправильного API и т. д. вместо того, чтобы реагировать на собственную ошибку.

У меня есть форма, и я хочу отправить ее на сервер и получить ответ, поэтому я написал следующее:

submitForm = async () => {
  fetch("www.somewhere.com", {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(some_data)
  })
  .then((response) => response.json())
  .then((responseJson) => {
     // do something
  })
  .catch((error) => {
      this.setState({server_error: "request failed try again."});
  });
};

Но похоже, что мой перехват не работает должным образом, потому что, если запрос не выполняется, я получаю ошибку от реакции native, как это: enter image description here, а в процессе работы он просто выпрыгиваетприложения, как я могу избежать этого?

1 Ответ

0 голосов
/ 12 февраля 2019

Не знаю, решит ли это вашу проблему, но ваш код извлечения пытается создать JSON, даже если ответ, например, 404.

Вам также необходимо проверить, в порядке ли ответперед созданием JSON

submitForm = async () => {
  fetch("www.somewhere.com", {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(some_data)
  })
  .then((response) => {
        if(response.statusText == "OK" && response.status >= 200 && response.status < 300) {
            return response.json()
        } else {
            throw new Error("Server can't be reached!")
        }
    })
  .then((json) => {
     console.log("hooray! we have json!")
     console.log(json)
  })
  .catch((error) => {
      console.log("error fetching data")
      console.log(error)
      console.log(error.message) // Server can't be reached!
      this.setState({server_error: "request failed try again."});
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...