Obserwacje i operacje tablicowe
Oprócz prostej iteracji nad kolekcją asynchroniczną, możemy wykonywać inne operacje, takie jak filtrowanie, mapowanie i wiele innych, zgodnie z definicją w API RxJS. To jest to, co łączy Observable
z wzorcem iteracyjnym, i pozwala nam traktować dane jako kolekcje (iterowalne).
Rozwińmy nasz przykład [043] i zrób coś więcej za pomocą naszego strumienia:
export class MyApp {
private doctors = [];
constructor(http: Http) {
http.get('http://jsonplaceholder.typicode.com/users/')
.flatMap((response) => response.json())
.filter((person) => person.id > 5)
.map((person) => "Dr " + person.name)
.subscribe((data) => {
this.doctors.push(data);
});
}
}
Zobacz przykład [045]
Oto dwie naprawdę użyteczne operacje tablicowe - map
ifilter
. Co dokładnie one robią?
map
utworzy nową tablicę z wynikami wywołania funkcji podanej na każdym elemencie w tej tablicy. W tym przykładzie użyliśmy go do stworzenia nowego zestawu wyników poprzez iterowanie przez każdy element i dołączanieDr
skrót przed nazwą każdego użytkownika. Teraz każdy obiekt w naszej tablicy maDr
poprzedzone wartością właściwości name.filter
utworzy nową tablicę ze wszystkimi elementami, które przejdą test zaimplementowany przez udostępnioną funkcję. Tutaj użyliśmy go do utworzenia nowego zestawu wyników poprzez wykluczenie dowolnego użytkownika, którego właściwośćid
jest mniejsza niż sześć.
Teraz w wywołaniu subscribe
dostajemy listą obiektów JSON, których właściwościid
są większe niż lub równe sześciu i których właściwości name
zostały uzupełnione ozDr
.
Funkcje map i filter pochodzące z Observable zwracają Observable - dlatego można łączyć je w łańcuch kropkami. Aby uzyskać pierwszy element tego łańcucha (obiekt klasy Observable) - podobnie jak w poprzednim przykładzie używamy flatMap. Konwertuje ona tablicę obiektów JSON na strumień Observable..
Istnieje wiele innych operacji tablicowych, które można zastosować wraz z Observables
; szukaj ich w RxJS API, na http://reactivex.io/ oraz rxmarbles.com.