0Pricing
TypeScript Academy · Урок

Обработка ошибок в асинхронном коде TypeScript

Управляйте асинхронными ошибками с помощью типизированных обёрток и служебных средств

«Обработка ошибок в асинхронном коде TypeScript» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

Асинхронные функции усложняют обработку ошибок. TypeScript помогает корректно обрабатывать отклонённые Promise.

try-catch для async/await

Заключайте вызовы await в try-catch, чтобы обрабатывать отклонения Promise.
async function loadUser(id: number): Promise<User> {
  try {
    return await api.getUser(id);
  } catch (err: unknown) {
    if (err instanceof Error) throw new AppError(err.message);
    throw new AppError('Unknown error');
  }
}

Ошибки Promise.all

Promise.all отклоняется при первом отклонении. Заключите вызов в try-catch.
try {
  const [user, posts] = await Promise.all([getUser(id), getPosts(id)]);
} catch (err) { /* one or both failed */ }

Promise.allSettled

allSettled возвращает и успешные результаты, и ошибки, не выбрасывая исключений.
const results = await Promise.allSettled([getUser(1), getPosts(1)]);
results.forEach(r => {
  if (r.status === 'fulfilled') console.log(r.value);
  else console.error(r.reason);
});

Типизированный асинхронный результат

Сочетайте асинхронность с паттерном результата для явной обработки ошибок.
async function safeGet<T>(fn: () => Promise<T>): Promise<Result<T>> {
  try { return { ok: true, value: await fn() }; }
  catch (e) { return { ok: false, error: e as Error }; }
}

Необработанные отклонения

Отслеживайте необработанные отклонения в Node.js, чтобы предотвращать сбои.
process.on('unhandledRejection', (reason: unknown) => {
  console.error('Unhandled rejection:', reason);
  process.exit(1);
});

Тайм-аут с Promise.race

Реализуйте типизированный паттерн тайм-аута с помощью Promise.race.
function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
  const timeout = new Promise<never>((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms));
  return Promise.race([promise, timeout]);
}

Паттерн повторных попыток

Реализуйте типизированные асинхронные повторные попытки с типизированными ошибками.
async function retry<T>(fn: () => Promise<T>, times: number): Promise<T> {
  for (let i = 0; i < times; i++) {
    try { return await fn(); } catch (e) { if (i === times - 1) throw e; }
  }
  throw new Error('Unreachable');
}

Обработка ошибок при параллельном выполнении

Обрабатывайте ошибки при одновременном выполнении асинхронных операций.
const [userResult, postsResult] = await Promise.allSettled([
  getUser(id).then(u => ({ ok: true, value: u })).catch(e => ({ ok: false, error: e })),
  getPosts(id).then(p => ({ ok: true, value: p })).catch(e => ({ ok: false, error: e })),
]);

Передача ошибок в AsyncQueue

Ошибки в асинхронных итераторах корректно передаются при использовании for-await.
async function* generate() {
  yield await fetchA();
  yield await fetchB(); // error here stops the loop
}
for await (const item of generate()) { process(item); }

Типизированное промежуточное ПО для ошибок в Next.js

Используйте типизированные границы ошибок в серверных действиях.
'use server';
async function createUser(data: CreateUserDto): Promise<Result<User>> {
  return safeGet(() => db.user.create({ data }));
}

Быстрая проверка

Что произойдёт, если не перехватить отклонённый Promise в функции async/await?

Итоги

Обработка ошибок в асинхронном коде TypeScript: вы изучили основные понятия этой темы и узнали, как применять их в реальных проектах на TypeScript.

Часто задаваемые вопросы

Урок «Обработка ошибок в асинхронном коде TypeScript» бесплатный?

Да — полный текст урока «Обработка ошибок в асинхронном коде TypeScript» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Обработка ошибок в асинхронном коде TypeScript»?

Управляйте асинхронными ошибками с помощью типизированных обёрток и служебных средств Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Обработка ошибок в асинхронном коде TypeScript»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Типизированные классы ошибок и иерархии
  2. Шаблон Result: Ok и Err
  3. Сужение перехваченных ошибок: unknown и Error
  4. Обработка ошибок в асинхронном коде TypeScript
← Назад к TypeScript Academy