logo

Obserwowalne RxJS

W RxJS obserwowalność to funkcja używana do utworzenia obserwatora i dołączenia go do źródła, od którego oczekiwane są wartości. Na przykład kliknięcia, zdarzenia myszy z elementu DOM lub żądanie HTTP itp. są przykładami obserwowalnymi.

Innymi słowy, można powiedzieć, że obserwator to obiekt posiadający funkcje wywołania zwrotnego, który jest wywoływany, gdy następuje interakcja z Obserwowalnym. Na przykład źródło weszło w interakcję, na przykład kliknięcie przycisku, Http prośba itp.

Obserwowalne można również zdefiniować jako leniwe zbiory Push zawierające wiele wartości. Zobaczmy prosty przykład, aby zrozumieć, w jaki sposób obserwable są wykorzystywane do przesuwania wartości.

ipconfig na Ubuntu

Zobacz następujący przykład:

 import { Observable } from 'rxjs'; const observable = new Observable(subscriber => { subscriber.next(10); subscriber.next(20); subscriber.next(30); setTimeout(() => { subscriber.next(40); subscriber.complete(); }, 1000); }); 

W powyższym przykładzie istnieje obserwowalność, która po subskrybowaniu przekazuje wartości 10, 20, 30 natychmiast i synchronicznie, ale wartość 40 zostanie wypchnięta po jednej sekundzie od wywołania metody subskrypcji.

Jeśli chcesz wywołać obserwowalne i zobaczyć powyższe wartości, musisz to zasubskrybować. Zobacz następujący przykład:

 import { Observable } from 'rxjs'; const observable = new Observable(subscriber => { subscriber.next(10); subscriber.next(20); subscriber.next(30); setTimeout(() => { subscriber.next(40); subscriber.complete(); }, 1000); }); console.log('These are the values just before subscribe'); observable.subscribe({ next(x) { console.log('We have got value ' + x); }, error(err) { console.error('something wrong occurred: ' + err); }, complete() { console.log('Done successfully'); } }); console.log('This value is just after subscribe'); 

Wyjście:

Kiedy wykonamy powyższy program, na konsoli otrzymamy następujący wynik:

Obserwowalne RxJS

Obserwable są uogólnieniami funkcji

Wiemy, że obserwable to funkcje, które działają jak kliknięcia, zdarzenia myszy z elementu DOM lub żądanie Http itp., ale obserwable nie przypominają EventEmitterów ani nie są obietnicami dla wielu wartości. W niektórych przypadkach obserwable mogą działać jak emitery zdarzeń, a mianowicie, gdy są przesyłane multiemisji przy użyciu podmiotów RxJS, ale zazwyczaj nie zachowują się jak emitery zdarzeń.

lista inicjalizacyjna Pythona

Obserwable są jak funkcje z zerowymi argumentami, ale uogólniają je, aby umożliwić wiele wartości.

Zobaczmy przykład, aby to jasno zrozumieć.

Prosty przykład funkcji:

 function foo() { console.log('Hello World!'); return 123; } const x = foo.call(); // same as foo() console.log(x); const y = foo.call(); // same as foo() console.log(y); 

Wyjście:

Zobaczysz następujące dane wyjściowe:

 'Hello World!' 123 'Hello World!' 123 

Napiszmy ten sam przykład, ale z obserwowalnymi:

 import { Observable } from 'rxjs'; const foo = new Observable(subscriber => { console.log('Hello World!'); subscriber.next(123); }); foo.subscribe(x => { console.log(x); }); foo.subscribe(y => { console.log(y); }); 

Wyjście:

Zobaczysz takie same dane wyjściowe jak powyżej:

Obserwowalne RxJS

Można to zobaczyć, ponieważ zarówno funkcje, jak i obiekty obserwowalne są leniwymi obliczeniami. Jeśli nie wywołasz tej funkcji, console.log('Hello World!') nie zostanie wykonane. Ponadto w przypadku Observables, jeśli nie „wywołasz” tego za pomocą subskrypcji, console.log('Hello World!') nie nastąpi.

Działanie obserwowalnego

Istnieją trzy fazy obserwowalności:

Diana Ankudinowa
  • Tworzenie obserwowalnych
  • Subskrybowanie Observables
  • Wykonywanie obserwacji

Tworzenie obserwowalnych

Istnieją dwa sposoby tworzenia obserwowalnych:

  • Korzystanie z metody konstruktora Observable
  • Korzystanie z metody Observable create().

Korzystanie z metody konstruktora Observable

Stwórzmy obserwowalny obiekt za pomocą metody konstruktora obserwowalnego i dodajmy wiadomość „To jest mój pierwszy Obserwowalny” za pomocą metody subskrybent.next dostępnej w Obserwowalnym.

plik testrx.js:

 import { Observable } from 'rxjs'; var observable = new Observable( function subscribe(subscriber) { subscriber.next('This is my first Observable') } ); 

Możesz także utworzyć Observable za pomocą metody Observable.create() w następujący sposób:

 import { Observable } from 'rxjs'; var observer = Observable.create( function subscribe(subscriber) { subscriber.next('This is my first Observable') } ); 

Subskrybowanie Observables

Subskrybowanie obserwowalnego jest jak wywołanie funkcji. Zapewnia wywołania zwrotne, do których dane zostaną dostarczone.

Możesz subskrybować obserwowalny, używając następującej składni:

Składnia:

drzewo binarne w Javie
 observable.subscribe(x => console.log(x)); 

Zobacz powyższy przykład z subskrypcją:

plik testrx.js:

 import { Observable } from 'rxjs'; var observer = new Observable( function subscribe(subscriber) { subscriber.next('This is my first Observable') } ); observer.subscribe(x => console.log(x)); 

Wyjście:

Obserwowalne RxJS

Wykonywanie obserwacji

Obserwowalny jest wykonywany, gdy jest subskrybowany. Zasadniczo istnieją trzy metody powiadamiania obserwatora:

Następny(): Ta metoda służy do wysyłania wartości, takich jak liczba, ciąg znaków, obiekt itp.

kompletny(): Ta metoda nie wysyła żadnej wartości. Wskazuje, że obserwowalne jest zakończone.

błąd(): Ta metoda służy do powiadamiania o błędzie, jeśli wystąpi.

Zobaczmy przykład, w którym utworzyliśmy obserwowalny ze wszystkimi trzema powiadomieniami i wykonajmy ten przykład:

kwartały w roku

plik testrx.js:

 import { Observable } from 'rxjs'; var observer = new Observable( function subscribe(subscriber) { try { subscriber.next('This is my first Observable'); subscriber.next('Testing Observable'); subscriber.complete(); } catch(e){ subscriber.error(e); } } ); observer.subscribe(x => console.log(x), (e)=>console.log(e), ()=>console.log('Observable is completed now.')); 

Metoda error jest wywoływana tylko w przypadku wystąpienia błędu. Po uruchomieniu powyższego kodu w konsoli zobaczysz następujące dane wyjściowe.

Wyjście:

Obserwowalne RxJS