Как можно получить код состояния (status code) из запроса fetch, находящегося в блоке catch?

Как можно получить статус-код из ошибки, если при запросе на сервер он не достигает этого момента из-за обработки в блоке catch?
  • 2 октября 2023 г. 7:27
Ответы на вопрос 2
В блоке catch ошибки в запросе fetch можно получить код состояния (status code) следующим образом:

```javascript
fetch('https://example.com/api')
  .then(response => {
    if (!response.ok) {
      throw new Error(response.status);
    }
    // дальнейшая обработка успешного ответа
  })
  .catch(error => {
    console.log(error.message); // выводит код состояния ошибки
  });
```

В этом коде мы бросаем ошибку с кодом состояния, если ответ сервера не является успешным (имеет код состояния, отличный от 200-299). Затем в блоке catch мы можем получить код состояния, используя `error.message`.

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

```javascript
fetch('https://example.com/api')
  .then(response => {
    if (!response.ok) {
      throw new Error(response.status);
    }
    // дальнейшая обработка успешного ответа
  })
  .catch(error => {
    error.statusCode = error.message; // сохраняем код состояния в свойстве 'statusCode'
    throw error;
  })
  .catch(error => {
    console.log(error.statusCode); // выводит код состояния ошибки
  });
```

Таким образом, мы сохраняем код состояния в свойстве `statusCode` ошибки в блоке catch, а затем можем получить его в последующих блоках catch или обработчиках ошибок.
Для получения статус кода запроса можно воспользоваться свойством `status` объекта ответа. Вот пример использования:

```javascript
const response = await fetch(`${this.webUrl}/checkConnection/`);
console.log(response.status, 'status');
```

Если статус код больше или равен 500, то запрос будет перехвачен блоком `catch`.
Похожие вопросы