Как обработать ошибку 404 в async / await? - PullRequest
0 голосов
/ 07 августа 2020

При получении почтового индекса из Postcode io API я попробовал этот код обработки ошибок:

async getCoord() {
    const postcodeAPI = `http://api.postcodes.io/postcodes/dt12pbbbbbbbbb`;
    let response;
    try {
        response = await fetch(postcodeAPI);
    }
    catch (e) {
        console.log(e);
    };
};

Метод fetch возвращает ошибку 404, поскольку почтовый индекс недействителен. Насколько я понимаю, блок try следует попробовать и пропустить, а ошибка должна быть обнаружена методом catch, но вместо этого я получил эту красную ошибку 404 в консоли: введите описание изображения здесь , что происходит в блоке try и аналогично отсутствию обработки ошибок в коде. Почему это происходит? Это потому, что это поведение браузера по умолчанию? Есть ли здесь способ улучшить обработку ошибок?

EDIT Я хотел, чтобы красная ошибка консоли исчезла и вместо этого показывалась моя собственная информация об ошибке, но ошибка консоли кажется неизбежной.

1 Ответ

3 голосов
/ 07 августа 2020

Fetch API не вызывает ошибок ни в одном коде состояния. Он выдает ошибки только при сбоях сети, т.е. когда он не может завершить sh сам запрос.

Вы можете использовать response.ok, чтобы проверить, завершился ли запрос с кодом состояния 2XX.

async getCoord() {
    const postcodeAPI = `http://api.postcodes.io/postcodes/dt12pbbbbbbbbb`;
    let response;
    try {
        response = await fetch(postcodeAPI);

        if (!response.ok) throw new Error('Request failed.');
    }
    catch (e) {
        console.log(e);
    };
};

Вы также можете явно проверить код состояния, если вам нужно:

if (response.status === 404) {
    // handle 404
}

Что касается вашего вопроса о регистрации 404 ошибок в консоли, нет возможности или необходимости , чтобы этого избежать. Всякий раз, когда вы делаете запрос, он регистрируется в инструментах разработчика. Но инструменты разработчика - это именно то, что они называют - инструменты для разработчиков. Вы можете смело предположить, что ваши пользователи не будут смотреть туда, и даже если кто-то это сделает, имея 404, это не конец света.

...