#javascript #browser #chromium
Вопрос:
Я пытаюсь что-то вроде:
const resp = await fetch('http://bad-domain'); //bad-domain does not resolve
Затем я обнаруживаю исключение позже в своем коде, которое гласит::
TypeError: failed to fetch
Является ли это ожидаемым результатом неудачного поиска DNS или это связано с resp
тем, что он отличается от обычного Response
объекта, fetch
возвращаемого без ошибок.
Просто это TypeError
явно не указывает на то, что проблема заключается в плохом сетевом запросе, а не в плохом коде javascript.
Ответ №1:
Это ожидаемое поведение:
12.3. Если ответом является сетевая ошибка, то отклоните p с помощью a
TypeError
и завершите эти подэтапы.
…где p — обещание, возвращенное fetch
. Спецификация не требует предоставления какой-либо конкретной информации о том, почему запрос не удался, просто о том, что он не удался (на сетевом уровне; он не отклоняется при ошибках HTTP, как я описываю здесь в своем старом анемичном блоге, вы должны проверить это на пути выполнения).
Комментарии:
1. (FWIW, использование
TypeError
для этого тоже кажется мне странным, но тогда это не единственная моя проблема сfetch
API [см. Ссылку выше].)2. Спасибо за каноническую ссылку. Я просмотрел спецификацию, но, должно быть, пропустил ее. MDN также немного неясен
3. @дорон — О, ух ты, я только что посмотрел на developer.mozilla.org/en-US/docs/Web/API/fetch#exceptions и это не просто неясно, это совершенно неправильно или, по крайней мере, довольно вводит в заблуждение, предполагая, что вы получаете ошибку типа только тогда, когда в URL-адресе указаны учетные данные. У меня есть еще три правки MDN в моем списке на ближайшие пару недель, я добавлю к нему это. 🙂
4. @дорон — #9377 .
5. Хорошенькая. Спасибо