Чем Observable отличается от Promise в Angular?
Signals и RxJS
Promise возвращает одно значение один раз, Observable — поток из нуля или множества значений во времени.
Основные различия
- Количество значений: Promise одно, Observable много.
- Ленивость: Observable не выполняется, пока на него не подписались, а Promise запускается сразу при создании.
- Отмена: подписку можно отменить (
unsubscribe), Promise отменить нельзя. - Операторы:
map,filter,debounceTime,switchMapпозволяют строить цепочки преобразований.
// Promise
fetch('/api/users').then((r) => r.json());
// Observable
this.http.get<User[]>('/api/users').pipe(
map((users) => users.filter((u) => u.active)),
catchError(() => of([])),
).subscribe((users) => (this.users = users));Где что
Angular использует Observable в HttpClient, роутере, формах и событиях. Одноразовые операции можно превратить в промис: firstValueFrom(obs$).
Коротко для собеседования
Observable — ленивый, отменяемый поток значений с богатыми операторами, Promise — единичный результат.