logo

RxJS-waarneembare gegevens

In RxJS is een waarneembare functie een functie die wordt gebruikt om een ​​waarnemer te creëren en deze te koppelen aan de bron waar waarden van worden verwacht. Klikken, muisgebeurtenissen van een DOM-element of een Http-verzoek, enz. zijn bijvoorbeeld het voorbeeld van waarneembaar.

Met andere woorden, je kunt zeggen dat waarnemer een object is met callback-functies, dat wordt aangeroepen wanneer er interactie is met het waarneembare. De bron heeft bijvoorbeeld interactie gehad door bijvoorbeeld op een knop te klikken, Http verzoek, enz.

Waarneembare waarden kunnen ook worden gedefinieerd als luie Push-verzamelingen van meerdere waarden. Laten we een eenvoudig voorbeeld bekijken om te begrijpen hoe waarneembare waarden worden gebruikt om de waarden te pushen.

Zie het volgende voorbeeld:

 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); }); 

In het bovenstaande voorbeeld is er een waarneembaar systeem dat de waarden 10, 20, 30 onmiddellijk en synchroon pusht wanneer er wordt geabonneerd, maar de waarde 40 zal worden gepusht na één seconde sinds de abonneemethode heeft aangeroepen.

Als je het waarneembare wilt oproepen en de bovenstaande waarden wilt zien, moet je je daarop abonneren. Zie het volgende voorbeeld:

 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'); 

Uitgang:

Wanneer we het bovenstaande programma uitvoeren, krijgen we het volgende resultaat op de console:

RxJS-waarneembare gegevens

Waarneembare waarden zijn generalisaties van functies

We weten dat observables functies zijn die fungeren als klikken, muisgebeurtenissen van een DOM-element of een Http-verzoek, enz., maar observables zijn niet zoals EventEmitters, en ook niet als Promises voor meerdere waarden. In sommige gevallen kunnen waarneembare objecten zich gedragen als EventEmitters, namelijk wanneer ze worden gemulticast met behulp van RxJS-onderwerpen, maar meestal gedragen ze zich niet als EventEmitters.

Waarneembare waarden lijken op functies met nulargumenten, maar generaliseren deze om meerdere waarden toe te staan.

Laten we een voorbeeld bekijken om dit duidelijk te begrijpen.

Een eenvoudig voorbeeld van een functie:

 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); 

Uitgang:

U ziet de volgende uitvoer:

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

Laten we hetzelfde voorbeeld schrijven, maar met Observables:

 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); }); 

Uitgang:

U ziet dezelfde uitvoer als hierboven:

RxJS-waarneembare gegevens

Je kunt dit zien omdat zowel functies als Observables luie berekeningen zijn. Als u de functie niet aanroept, zal console.log('Hello World!') niet plaatsvinden. Bovendien zal bij Observables de console.log('Hello World!') niet plaatsvinden als je het niet 'roept' met abonneren.

Werking van een waarneembaar

Er zijn drie fasen in een waarneembare:

  • Waarneembare waarnemingen creëren
  • Abonneren op Observables
  • Waarnemingen uitvoeren

Waarneembare waarnemingen creëren

Er zijn twee manieren om waarneembare gegevens te creëren:

  • Met behulp van de Observable constructor-methode
  • Met behulp van de Observable create()-methode

Met behulp van de Observable constructor-methode

Laten we een observable maken met behulp van de observable constructor-methode en een bericht toevoegen: 'Dit is mijn eerste observable' met behulp van de abonnee.next-methode die beschikbaar is in Observable.

testrx.js-bestand:

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

U kunt Observable ook als volgt maken met de methode Observable.create():

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

Abonneren op Observables

Het abonneren op een waarneembare is hetzelfde als het aanroepen van een functie. Het biedt callbacks waar de gegevens naartoe worden afgeleverd.

U kunt zich abonneren op een waarneembare met behulp van de volgende syntaxis:

Syntaxis:

 observable.subscribe(x => console.log(x)); 

Zie het bovenstaande voorbeeld met abonneren:

testrx.js-bestand:

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

Uitgang:

RxJS-waarneembare gegevens

Waarnemingen uitvoeren

Een waarneembare wordt uitgevoerd wanneer erop wordt ingeschreven. Er zijn over het algemeen drie methoden bij een waarnemer die op de hoogte worden gesteld:

volgende(): Deze methode wordt gebruikt om waarden zoals een getal, string, object etc. te verzenden.

compleet(): Deze methode verzendt geen waarde. Het geeft aan dat het waarneembare voltooid is.

fout(): Deze methode wordt gebruikt om eventuele fouten te melden.

Laten we een voorbeeld bekijken waarin we het waarneembare hebben gemaakt met alle drie de meldingen en dat voorbeeld uitvoeren:

testrx.js-bestand:

Mia Khalifa-leeftijd
 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.')); 

De foutmethode wordt alleen aangeroepen als er een fout is. Wanneer u de bovenstaande code uitvoert, ziet u de volgende uitvoer in de console.

Uitgang:

RxJS-waarneembare gegevens