PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Сравни способы реализации асинхронности и объясни, когда выбирать каждый вариант.

Асинхронность и Event Loop

Асинхронность в JavaScript реализуют колбэками, промисами и async/await; для параллельного выполнения — комбинаторами Promise. Выбор зависит от читаемости и задачи.

Способы

Колбэки

getUser(id, (user) => getPosts(user, (posts) => render(posts)));

Минус: вложенность («callback hell»), сложная обработка ошибок.

Промисы

getUser(id).then(getPosts).then(render).catch(handleError);

Плоские цепочки, единый catch, комбинаторы.

async/await

try {
  const user = await getUser(id);
  const posts = await getPosts(user);
} catch (e) { handleError(e); }

Синхронный вид, удобный try/catch — современный дефолт.

Параллельность

const [a, b] = await Promise.all([fetchA(), fetchB()]);

Как выбирать

  • Новый код → async/await (читаемость).
  • Несколько независимых операций → Promise.all/allSettled.
  • Потоковые события/подписки → не промисы, а EventEmitter/Observable (RxJS).
  • Колбэки — в основном legacy и низкоуровневые API.

Коротко для собеседования

Асинхронность: колбэки (legacy, вложенность), промисы (цепочки, catch), async/await (синхронный вид, try/catch) — современный выбор. Для параллельного выполнения — Promise.all/allSettled, для потоков событий — Observable.

Другие вопросы раздела