Подтвердить что ты не робот

Как обрабатывать ошибки JavaScript Fetch?

Если в Chrome произошел сбой fetch, то единственная информация об ошибке, которую я получаю, -

TypeError: Не удалось получить

Как отобразить информационное сообщение об ошибке для конечного пользователя в этом случае?

В частности:

Можно ли получить какие-либо сведения о том, почему сбой неудачи?

Например, если сервер разбился, Chrome DevTools может зарегистрировать консольное сообщение net: ERR_EMPTY_RESPONSE, но, похоже, нет способа получить к нему доступ из JavaScript.

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

Можно ли отличать ошибки выборки от других TypeError s?

Если я не могу получить данные об ошибке, я бы хотел, по крайней мере, заменить ужасно неопределенное сообщение "Failed to fetch" ​​с информативным сообщением "Не удалось получить доступ к веб-сайту, попробуйте еще раз позже", и я как сделать это без какого-либо риска отображать это сообщение для других TypeError s.

Единственное решение, которое я нашел здесь, - проверить фактический message, чтобы увидеть, если он "Failed to fetch". Это явно зависит от браузера; он работает в Chrome, похоже, что он будет работать на любом пользовательском языке Chrome, а другим браузерам потребуется собственное тестирование и обработка.

4b9b3361

Ответ 1

Кажется вероятным, что больше нет информации о проблемах с сетью/правами доступа/ввода.

Можно ли отличать ошибки выборки от других TypeErrors?

Да, вам просто нужно catch только ошибки из вызова fetch:

fetch(…)
.catch(err => new FetchError(err))
.…

class FetchError extends Error {
    constructor(orig) {
        super();
        this.message = "fetch error";
        this.details = orig;
    }
}