intermediate

Promises и async/await

Состояния Promise, цепочки, комбинаторы, возвращаемые значения async-функций и планирование await.

Promise представляет eventual fulfillment или rejection. `then` возвращает новый Promise. `async`-функции всегда возвращают Promise; `await` приостанавливает только async-функцию, а не поток вызывающего.

`Promise.all` fail-fast. `Promise.allSettled` ждёт все. `Promise.race` завершается с первым settled. `Promise.any` резолвится с первым fulfillment.

Работа часто стартует при запуске executor или тела async-функции — не в момент `await`.

					Promise.all([Promise.resolve('ok'), Promise.reject(new Error('bad'))])
  .catch((e) => console.log(e.message)); // bad
				

На интервью объясняйте концепцию на конкретном примере и называйте поведение рантайма, которое проверяют.

Типовые ошибки: путать похожие API и забывать edge cases в live coding.

Компромисс часто между ясностью и производительностью или между безопасностью и удобством.

Чеклист:

  • Разделяйте создание и awaiting.
  • Выбирайте правильный комбинатор.
  • Явно пробрасывайте rejections.