@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 просмотра
Пригласить эксперта
Ответы на вопрос 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)
теперь сообщение доходит до консоль.лога

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

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

Похожие вопросы