Sobes.tech
Middle

Kas yra observable?

sobes.tech AI

Atsakymas iš AI

Observable yra objektas, kuris atstovauja duomenų arba įvykių srautą, kuris gali būti asinchroninis. Stebimi šaltiniai gali išleisti reikšmes tam tikru laikotarpiu, o prenumeratoriai (Subscribers arba Observers) gali reaguoti į šias reikšmes jų atsiradimo metu.

Pagrindinės sąvokos:

  • Observable (Stebimas šaltinis): Duomenų arba įvykių šaltinis.
  • Observer (Stebėtojas): Objektas su metodais next, error, complete, kurie reaguoja į įvykius iš Observable:
    • next: Gauti kitą reikšmę.
    • error: Įvyko klaida.
    • complete: Duomenų srautas baigtas.
  • Subscription (Prenumerata): Ryšys tarp Observable ir Observer. Prenumerata sukuriama iškvietus subscribe metodą ant Observable. Ji leidžia Observer gauti reikšmes ir valdyti prenumeratos gyvavimo ciklą.
  • Operators (Operatoriai): Funkcijos, kurios transformuoja, sujungia ir valdo Observable srautus. Pavyzdžiai: map, filter, mergeMap, debounceTime.

Observable, skirtingai nuo Promises, gali išleisti daug reikšmių per tam tikrą laiką, atstovaudamas duomenų srautą, o ne vienkartinę asinchroninę įvykį.

Pavyzdys naudojant RxJS (populiari reaktyvaus programavimo biblioteka):

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

// Observable sukūrimas iš masyvo
const source = new Observable(observer => {
  observer.next(1);
  observer.next(2);
  observer.next(3);
  observer.complete(); // Baigti srautą
});

// Prenumerata ir operatoriaus naudojimas
const subscription = source.pipe(
  map(value => value * 2) // `map` operatorius dvigubina kiekvieną reikšmę
).subscribe({
  next: value => console.log(value), // Gauti reikšmes: 2, 4, 6
  error: err => console.error(err), // Klaidos apdorojimas
  complete: () => console.log('Complete!') // Baigti
});

Pagrindiniai privalumai:

  • Reaktyvus programavimas: patogu valdyti asinchroninius duomenų srautus.
  • Kompozicija: lengva sujungti ir transformuoti srautus naudojant operatorius.
  • Gyvenimo ciklo valdymas: prenumerata leidžia aiškiai valdyti duomenų gavimą ir išvengti atminties nutekėjimo.