@mihmig

Javascript fetch — обработка сетевой ошибки, какой правильный способ?

В качестве замены jquery и XHR-callback hell-a использую fetch:
fetch("http://localhost/getData",
    {
        credentials: "omit",
        cache: "no-cache",
        headers: {
            "Accept": "application/json"
        }
    })
    .then((response) => response.json())
    .then((json) =>
    {
      processData(json);
    }
)
.catch(function(error) {
    	//if (error.message == 'Failed to fetch' || error.message == 'NetworkError when attempting to fetch resource.') {
    	if (error.message.search('fetch') > -1 ) {
    		alert('Ошибка связи');
        } else {
        	alert('Возникла ошибка: ' + error);
        }
});

Хочу корректно обработать все варианты ошибок, например если сервер возвращает не 200-й ответ, то я могу проверить response.ok
Проблема в том, что если сетевой ресурс вообще недоступен (проблема сети или сервер не запущен) то в блоке catch я не вижу об этом явного указания, разные браузеры возвращают разный текст ошибки - Chrome - "Failed to fetch", Firefox - "NetworkError when attempting to fetch resource". Приходится городить костыли см. выше.

Есть ли какой более элегантный вариант?
  • Вопрос задан
  • 2784 просмотра
Пригласить эксперта
Ответы на вопрос 2
@frees2
у меня так
.then(function(response) {
              if(response.ok)
                     return response.text();
       })
Ответ написан
Комментировать
mbelskiy
@mbelskiy
Software Developer
Двигайтесь от противного: вы всегда можете идентифицировать ошибку, если это ответ сервера, и в таком случае отобразить корректное сообщение об ошибке. Иначе показывайте что-то общее, вида "Повторите попытку позже"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы