@AlexNew22

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

Почему ошибка не уходит в catch фетча и не передается дальше в catch промиса?

const url = 'https://jsonplaceholder.typicode.co'
const getUser = async () => {
	return new Promise(resolve => {
  	fetch(url).then(data => resolve(data)).catch(err => err)
  }).catch(err => err.message)
}
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Совершенно мне непонятно, что вы этим кодом хотели сказать. Но.
не уходит в catch фетча
Вы ошибаетесь, уходит.
не передается дальше в catch промиса
Потому что вы её уже обработали в первом catch. Если зачем-то хотите, чтобы она ушла дальше по цепочке catch, её надо бросить заново.

Если вам зачем-то необходимо оборачивать promise из fetch в другой (а это вряд ли), то код должен выглядеть так:
const url = 'https://jsonplaceholder.typicode.co'
const getUser = async () => {
  return new Promise((resolve, reject) => {
  	fetch(url).then(data => resolve(data)).catch(err => reject(err))
  }).catch(err => err.message)
}

Но он полностью аналогичен этому:
const url = 'https://jsonplaceholder.typicode.co'
const getUser = async () => fetch(url).catch(err => err.message)

Только этот код "проглатывает" ошибку и возвращает её текст из функции, а в случае успеха возвращает не полученные данные, а весь объект ответа, на котором нужно дополнительно вызывать .json() или .text().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы