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.