Sobes.tech
Middle

Kokios yra panašumai ir skirtumai tarp Observable ir Promise?

sobes.tech AI

Atsakymas iš AI

Observable yra duomenų srautas, galintis skleisti daugybę reikšmių laikui bėgant. Jis yra reaktyvus ir palaiko prenumeratos atšaukimą. Promise visada išsprendžiamas arba atmetamas tik kartą ir yra vienkartinis. Observable palaiko operatorius duomenų transformavimui, Promise – ne.

Savybė Observable Promise
Reikšmių skaičius Gali skleisti daugybę reikšmių Visada viena reikšmė (sprendimas/atmetimas)
Atšaukimas Palaiko prenumeratos atšaukimą Nepalaiko atšaukimo
Reaktyvumas Reaktyvus Ne
Operatoriai Palaiko operatorius (map, filter ir kt.) Ne
Vėlyvumas Vėlyvas (vykdomas prenumeratos metu) Skubus (vykdomas iš karto)

Pavyzdys su Observable:

import { Observable } from 'rxjs';

const manoObservable = new Observable(subscriber => {
  subscriber.next(1);
  subscriber.next(2);
  setTimeout(() => {
    subscriber.next(3);
    subscriber.complete();
  }, 1000);
});

manoObservable.subscribe({
  next: value => console.log('Observable reikšmė:', value),
  error: err => console.error('Observable klaida:', err),
  complete: () => console.log('Observable pabaiga'),
});

Pavyzdys su Promise:

const manoPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Promise išspręsta');
    // reject('Promise atmesta');
  }, 1000);
});

manoPromise
  .then(value => console.log('Promise reikšmė:', value))
  .catch(error => console.error('Promise klaida:', error));