Вступить в клуб →
средняявопросJavaScript и TypeScript

Ошибка из асинхронной функции не попадает в try/catch

async function loadUser(id) {
  const res = await fetch(`/api/users/${id}`);
  if (!res.ok) throw new Error('Не удалось загрузить пользователя');
  return res.json();
}

function handleClick() {
  try {
    loadUser(1);
  } catch (e) {
    showError(e.message);
  }
}

Сервер отвечает кодом 500. Что увидит пользователь после клика?

  • Сообщение об ошибке: блок try перехватывает любые ошибки, возникшие внутри вызванных из него функций.
  • Ничего: вызов без await вернул промис, отклонение улетело мимо catch и стало необработанным, showError не вызовется.
  • Сообщение об ошибке, но с задержкой: блок catch остаётся активным до завершения промиса и сработает, когда придёт отклонение.
  • Ничего: код не запустится вовсе, потому что асинхронную функцию нельзя вызывать из обычной.

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела