PassFront
  1. PassFront
  2. База знаний
  3. Signals и RxJS

Чем 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 — единичный результат.

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