Czy jedyna różnica między Observable.of
i Observable.from
format argumenty? Podobnie jak Function.prototype.call
i Function.prototype.apply
?
Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
Nie do końca. Podczas przekazywania tablicy do Observable.from
jedyną różnicą między nią a Observable.of
sposobem przekazywania argumentów.
Jednak Observable.from
przyjmie argument, który jest
obiekt, który można subskrybować, obietnicę, obiekt podobny do obserwowalnego, tablicę, obiekt iterowalny lub obiekt podobny do tablicy do konwersji
Nie ma podobnego zachowania dla Observable.of
- który zawsze akceptuje tylko wartości i nie wykonuje konwersji.
Ważne jest, aby zwrócić uwagę na różnicę między of
i from
podczas przekazywania struktury podobnej do tablicy (w tym ciągów znaków):
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
wypisze całą tablicę naraz.
Z drugiej strony,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
wypisuje elementy 1 na 1.
W przypadku łańcuchów zachowanie jest takie samo, ale na poziomie znaków.
Innym interesującym faktem jest to, że Observable.of ([]) będzie pustą tablicą, gdy ją zasubskrybujesz. W przypadku gdy subskrybujesz Observable.from ([]), nie otrzymasz żadnej wartości.
Jest to ważne, gdy wykonujesz kolejną operację z przełącznikiem.
Np .: W poniższym przykładzie zapisuję ofertę pracy, a następnie witryny, a następnie komentarze jako strumień.
jeśli nie ma miejsca do zapisania, tj. data.length = 0 w sekcji addSite, powyższy kod zwraca Observable.of ([]), a następnie przechodzi do zapisywania komentarzy. Ale jeśli zastąpisz go Observable.from ([]), kolejne metody nie zostaną wywołane.
rxfiddle
źródło
Różnica w jednej linii:
from : Emituj elementy po kolei z tablicy. Na przykład
of : Emituj całą tablicę naraz. Na przykład
UWAGA: od operatora mogą zachowywać się jak od operatora z operatorem spread
źródło
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
źródło
from
: Utwórz obserwowalne z tablicy, obietnicy lub iterowalne. Przyjmuje tylko jedną wartość. W przypadku tablic, elementów iteracyjnych i łańcuchów wszystkie zawarte wartości będą emitowane jako sekwencjaof
: Utwórz obserwowalne ze zmiennymi ilościami wartości, emituj wartości w kolejności, ale tablice jako pojedynczą wartośćźródło