@x1nax

Почему не срабатывает catch?

let info = (user) => {
  fetch('https://api.github.com/users/'+ user)
  .then(res =>  res.json())
  .then(res => {
    let newImg = document.createElement("IMG");
    let newp = document.createElement("p");
    let newA = document.createElement("a");
    let newh1 = document.createElement("h1");
    newImg.src = res.avatar_url;
    newh1.innerHTML = res.name;
    newp.innerHTML = res.bio;
    newA.href = res.html_url;
    document.body.appendChild(newA);
    newA.appendChild(newh1);
    document.body.appendChild(newp);
    document.body.appendChild(newImg);
    })
    .catch(err => document.body.innerHTML = 'Ты написал ерунду');
}

info('12312fff');
  • Вопрос задан
  • 810 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
https://learn.javascript.ru/fetch

fetch низкоуровневая функция для работы с HTTP. Ответ 404 с точки зрения fetch ничем не лучше и не хуже чем 200 или 503 и не считается ошибкой.
Промис завершается с ошибкой, если fetch не смог выполнить HTTP-запрос, например при ошибке сети или если нет такого сайта. HTTP-статусы такие как 404 или 500, не являются ошибкой.


Вам нужно самостоятельно проверять код ответа (как в примерах выше) или использовать какую-нибудь библиотеку, например, axios.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Simply1993
@Simply1993
Frontend developer
Для catch нужно кидать ошибку, например
throw new Error('text error');
Ответ написан
Tim-A-2020
@Tim-A-2020
в таком случае попадет в catch. Скорее всего не попадает потому что сервер возвращает json
let info = (user) => {
    fetch('https://api.github.com/users/' + user)
        .then(res => {
            if (res.status !== 200) {
                throw new Error(res.statusText)
            }
            return res;
        })
        .then(res => res.json())
        .then(res => {
            console.log(res)
        })
        .catch(err => console.error(err));
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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