Урок 12

Итоги курса

Курс об асинхронности в JavaScript.

Что ты узнал

  • Синхронный и асинхронный код — разница, event loop
  • Callbacks — error-first, callback hell
  • Промисы — состояния, then, catch, finally, цепочки
  • Комбинаторы — all, allSettled, race, any
  • async/await — синтаксис, обработка ошибок, параллельность
  • Event loop — микро- и макрозадачи, порядок
  • Fetch API — запросы, AbortController, обработка ошибок
  • Обработка ошибок — try/catch, retry, кастомные ошибки
  • Асинхронные итераторы — for await...of, генераторы
  • Таймеры — setTimeout, setInterval, requestAnimationFrame
  • Паттерны — пул, retry, circuit breaker, дедупликация

Ключевые идеи

Асинхронность — не многопоточность. Один поток, но операции не блокируют.

Промисы — фундамент. async/await — синтаксический сахар над ними.

Параллельно быстрее. Promise.all вместо последовательных await.

Обрабатывай ошибки. try/catch, .catch, проверка res.ok.

Ограничивай параллельность. Сотни запросов одновременно — плохо.

Отменяй устаревшее. AbortController для запросов.

Event loop важен. Промисы раньше таймеров, микрозадачи блокируют.

Частые ошибки

  • await в forEach — не работает
  • Последовательные await вместо Promise.all
  • Забыть catch — unhandled rejection
  • Не проверять res.ok в fetch
  • Бесконечный retry без ограничения
  • Блокировать поток тяжёлыми вычислениями
  • Забыть отменить запрос при размонтировании
  • Накопление вызовов в setInterval

Что дальше

  • Web Workers — многопоточность
  • Streams — потоковая обработка
  • WebSockets — реальное время
  • SSE — server-sent events
  • TanStack Query — кеширование данных
  • RxJS — реактивные потоки

Полезные ссылки

  • MDN Promises: developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise
  • javascript.info/async
  • MDN Fetch: developer.mozilla.org/ru/docs/Web/API/Fetch_API
  • Jake Archibald «In The Loop» — доклад про event loop

Заключение

Асинхронность — основа современного JavaScript. Почти всё в вебе асинхронно: запросы, события, таймеры, файлы. Понимание промисов, async/await и event loop отличает новичка от уверенного разработчика. Правила: параллельно где можно, обрабатывай ошибки всегда, отменяй устаревшее, ограничивай нагрузку.