Обработка ошибок в HTTP Ajax Call с использованием $fetch Javascript

Я пытался решить проблемы, связанные с сетью, в HTTP-вызове ajax. Итак, я временно остановил службу соответствующего API в IIS и попытался вызвать закрытый API - http://localhost:1000/GetData,

fetch("http://localhost:1000/GetData")
    .then(handleErrors)
    .then(function(response) {
        return response.Json();
    }).catch(function(error) {
        console.log(error);
    });

Я тоже пробовал следующий код

fetch("http://localhost:1000/GetData")
.then(response => {
        if(response) {
          if (response.status === 200) {
            alert('Super');
            return response.json();
          } else {
            alert('Hai');
            return '';
          } 
        } else {
          alert('Oooops');
          return '';
        }
      })
.catch(function(error) {
            console.log(error);
        });

Но его сбой и прямое попадание в блок захвата, не вызывая каких-либо alert и его выбрасывание ошибки. Кроме того response.json(); находится в блоке Успех, я не знаю, как это выполняется.

TypeError: response.json is not a function
Stack trace:
onFetchError/<@http://192.168.4.159:3000/app.0df2d27323cbbeada2cd.js:9946:13

Пожалуйста, помогите мне, как проверить код состояния и как обработать ошибку сети (например, сеть недоступна 404 и т. Д.)

Реферальный сайт: https://www.tjvantoll.com/2015/09/13/fetch-and-errors/

1 ответ

Основываясь на этой проблеме на Github, вы можете вместо этого попытаться определить типы ошибок в блоке catch. Итак, что-то вроде этого может работать для вашего случая:

fetch("http://localhost:1000/GetData")
  .then(response => {
    alert("Super");
    return response.json();
  })
  .catch(err => {
    const errStatus = err.response ? err.response.status : 500;
    if (errStatus === 404){
      // do something
    } else {
      // do another thing
    }
  });
Другие вопросы по тегам