@georgedubinsky8888

Что и где добавить к коду чтобы если API вернет ошибку она обрабатывалась?

У меня есть приложение, написанное на Redux-React. В файле index.js (action) я написал запрос к Api, а затем API возвращает мне данные. Но один человек сделал замечание по поводу этого кода, он сказал:

Никак не обрабатывается, если API вернул ошибку.


Маленька часть index.js(action):

export function fetchData(day) {
  return async dispatch => {
    dispatch({ type: "LOAD_DATA_START", day });
    const response = await fetch(`https://ссылка на Api`);
    const data = (await response.json()).body;
    dispatch({ type: "LOAD_DATA_END", payload: { data, day } });
  };
}

Что здесь и каким образом дописать чтобы если АPI вернет ошибку она обрабатывалась? Если можно дайте ответ кодом, так как я никогда такого не делал...
P.S. Заменять на конструкцию then нельзя. Должно быть async-await
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 4
@vadimparinov
export function fetchData(day) {
return async dispatch => {
dispatch({ type: "LOAD_DATA_START", day });
try{
const response = await fetch(`https://ссылка на Api`);
const data = await response.json().body;
}catch(e){
console.log(e)
}
dispatch({ type: "LOAD_DATA_END", payload: { data, day } });
};
}
Ответ написан
anatoly_kulikov
@anatoly_kulikov
Помог ответ? Отметь решением!
В зависимости от того, что может прийти от API, нужно обрабатывать поведение. Например, на одном из проектов у меня было так - приходил объект, у которого был ключ state, в зависимости от его значения было либо одно, либо другое. Так и здесь - пропишите варианты того, что может прилететь в ответку и обрабатывайте их.
Ответ написан
Для всего этого уже давно есть promise. В resolve храните нормальные ответы, в reject отправляйте как ошибки по статусу, так и ошибки приходимые с бэкенд (например свойством error). Затем вызываете у промиса then (падает resolve) и catch (падает reject)
Ответ написан
@Lessap
Мы говорим говорим о ошибках, возвращаемых апи, к которому вы обращаетесь, а не fetch api, верно? Тогда стоит обратить внимание, что какой бы статус не вернулся на запрос (будь то 404 или 200), fetch не будет возвращать error, так что нужно писать обработчик на нужный(е) варианты. Статус хранится в свойстве status объекта Response. Так же у Response есть свойство ok, которое принимает значение true в случаях, если статус входит в интервал 200-299.
Тем не менее, не всегда в случаях ошибки сервер возвращает невалидный статус, так что решение разнится от варианта к варианту.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
iBolit.pro Москва
от 170 000 до 250 000 руб.
Myagi Минск
от 3 000 до 4 000 usd.
ManyChat Москва
от 180 000 руб.
06 дек. 2019, в 09:02
30000 руб./за проект
06 дек. 2019, в 08:55
5000 руб./за проект
06 дек. 2019, в 01:32
10000 руб./за проект