Загрузка…
Загрузка…
Оба описывают асинхронность, но контракт разный — фундамент перед вопросами про RxJS в Angular.
| Promise | Observable | |
|---|---|---|
| Значения | одно | 0..N + complete/error |
| Старт | обычно сразу | lazy до subscribe (холодный поток) |
| Отмена | внешне (AbortController) | unsubscribe / операторы |
| Композиция | then / all | map, switchMap, retry… |
const p = fetch('/api').then(r => r.json()); // уже выполняется
const o$ = this.http.get<User[]>('/api/users');
o$.pipe(takeUntilDestroyed()).subscribe(users => this.users.set(users));HttpClient возвращает Observable. Мост к Promise — firstValueFrom / lastValueFrom. async pipe принимает оба типа, но экосистема Angular заточена под потоки и отмену.
Спросите, что вернёт HttpClient и можно ли отменить запрос. Ожидают: Observable + unsubscribe/switchMap-отмена, а не «Promise как везде в JS».
Promise — одноразовый результат; Observable — композируемый отменяемый поток. В Angular по умолчанию думайте Observable, а Promise используйте на границах API, где он обязателен. Ещё нюанс: холодный Observable можно безопасно описать заранее; Promise с побочным эффектом в конструкторе уже «убежал» до подписки потребителя.
