Задать вопрос
@AlexNew22

Почему ошибка в then не возвращает результат промиса?

Почему в данном случае не срабатывает ошибка и промис не возвращает результат в виде ошибки, которую мы бы обработали в result?
const url = 'https://jsonplaceholde'
function getUserAccess(url) {
	return new Promise((resolve, reject) => {
  	fetch(url).then(data => resolve(data.json())).then(null, err => {throw err})
  })
}

const app = async () => {
	const result = await getUserAccess(url).catch(err => err.message)
  console.log(result)
}

app()
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что в первом .then вы вызываете callback-функцию resolve, которая завершает выполнение функции и переводит Promise в состояние fulfilled со значением, равным Promise из data.json(). Ошибка в data.json() будет обрабатываться уже в рамках нового Promise.
Ответ написан
Alexandroppolus
@Alexandroppolus
кодир
return new Promise((resolve, reject) => {
  	fetch(url).then(data => resolve(data.json())).then(null, err => {throw err})
  })


1) fetch(url) в итоге отклоняется.
2) then(data => resolve(data.json())) будет поскипано: здесь только обработка фулфилледа, которого, увы, не случилось
3) then(null, err => {throw err}) - а вот это уже catch. Он перевыбросит исключение. Но поздно, throw случается в "асинхронном" коде, и не отлавливается конструктором промиса. Здесь надо вручную вызвать reject:
then(null, reject)
теперь сообщение доходит до консоль.лога

Но это всё, конечно, лютая наркомания. Не пиши так. За такой необычный код тебя вскроют.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 11:03
5000 руб./за проект
18 дек. 2024, в 10:44
130000 руб./за проект
18 дек. 2024, в 10:02
7000 руб./за проект