Sobes.tech
Middle

Czym jest observable?

sobes.tech AI

Odpowiedź od AI

Observable to byt podmiotem reprezentującym strumień danych lub zdarzeń, który może być asynchroniczny. Źródła obserwowalne mogą emitować wartości przez określony czas, a subskrybenci (Subscribers lub Observers) mogą reagować na te wartości w miarę ich pojawiania się.

Kluczowe koncepcje:

  • Observable (Źródło obserwowalne): Źródło danych lub zdarzeń.
  • Observer (Obserwator): Obiekt z metodami do reagowania na zdarzenia z Observable (next, error, complete).
    • next: Odbiór kolejnej wartości.
    • error: Wystąpienie błędu.
    • complete: Zakończenie strumienia danych.
  • Subscription (Subskrypcja): Połączenie między Observable a Observer. Subskrypcja jest tworzona podczas wywołania metody subscribe na Observable. Pozwala Observerowi na odbieranie wartości i zarządzanie cyklem życia subskrypcji (np. anulowanie, aby zapobiec wyciekom pamięci).
  • Operators (Operatory): Funkcje do transformacji, łączenia i zarządzania strumieniami Observable. Przykłady: map, filter, mergeMap, debounceTime.

W przeciwieństwie do Promise, Observable mogą emitować wiele wartości w czasie, reprezentując strumienie danych, a nie pojedyncze asynchroniczne zdarzenie.

Przykład użycia w RxJS (popularnej bibliotece do programowania reaktywnego):

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

// Tworzenie Observable z tablicy
const source = new Observable(observer => {
  observer.next(1);
  observer.next(2);
  observer.next(3);
  observer.complete(); // Zakończenie strumienia
});

// Subskrypcja i użycie operatora
const subscription = source.pipe(
  map(value => value * 2) // Operator map podwaja każdą wartość
).subscribe({
  next: value => console.log(value), // Odbiór wartości: 2, 4, 6
  error: err => console.error(err), // Obsługa błędów
  complete: () => console.log('Complete!') // Zakończenie
});

Główne zalety:

  • Programowanie reaktywne: wygodne zarządzanie asynchronicznymi strumieniami danych.
  • Komponowalność: możliwość łatwego łączenia i transformacji strumieni za pomocą operatorów.
  • Zarządzanie cyklem życia: subskrypcja pozwala na jawne zarządzanie odbiorem danych i zapobieganie wyciekom pamięci.