Sobes.tech
Middle

Čo je to observable?

sobes.tech AI

Odpoveď od AI

Observable je entita, ktorá predstavuje tok dát alebo udalostí, ktorý môže byť asynchrónny. Zdroj pozorovaných udalostí môže emitovať hodnoty počas určitého časového obdobia, a odberatelia (Subscribers alebo Observers) môžu reagovať na tieto hodnoty, keď sa objavia.

Kľúčové koncepty:

  • Observable (Pozorovateľný zdroj): Zdroj dát alebo udalostí.
  • Observer (Pozorovateľ): Objekt s metódami na reakciu na udalosti od Observable (next, error, complete).
    • next: Prijatie ďalšej hodnoty.
    • error: Vznik chyby.
    • complete: Ukončenie toku dát.
  • Subscription (Odbor): Väzba medzi Observable a Observer. Odbor sa vytvára volaním metódy subscribe na Observable. Umožňuje Observerovi prijímať hodnoty a riadiť životný cyklus odberu (napríklad odhlásiť sa, aby sa predišlo únikom pamäte).
  • Operators (Operátory): Funkcie na transformáciu, kombinovanie a riadenie tokov Observable. Príklady: map, filter, mergeMap, debounceTime.

Observable na rozdiel od Promises môže emitovať množstvo hodnôt v priebehu času, predstavujúc tok dát, nie jednorazovú asynchrónnu udalosť.

Príklad použitia v RxJS (populárna knižnica pre reaktívne programovanie):

import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

// Vytvorenie Observable z poľa
const source = new Observable(observer => {
  observer.next(1);
  observer.next(2);
  observer.next(3);
  observer.complete(); // Ukončenie toku
});

// Odber a použitie operátora
const subscription = source.pipe(
  map(value => value * 2) // Operátor map zdvojnásobí každú hodnotu
).subscribe({
  next: value => console.log(value), // Prijímanie hodnôt: 2, 4, 6
  error: err => console.error(err), // Spracovanie chýb
  complete: () => console.log('Complete!') // Ukončenie
});

Hlavné výhody:

  • Reaktívne programovanie: Pohodlné riadenie asynchrónnych tokov dát.
  • Kompozicovateľnosť: Možnosť ľahko kombinovať a transformovať toky pomocou operátorov.
  • Riadenie životného cyklu: Odbor umožňuje explicitne riadiť získavanie dát a predchádzať únikom pamäte.