Odpowiedzi:
Nie do końca. Podczas przekazywania tablicy do Observable.fromjedyną różnicą między nią a Observable.ofsposobem przekazywania argumentów.
Jednak Observable.fromprzyjmie 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 ofi frompodczas 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ń.
.do((data) => {
this.jobService.save$.next(this.job.id);
})
.switchMap(() => this.jobService.addSites(this.job.id, this.sites)
.flatMap((data) => {
if (data.length > 0) {
// get observables for saving
return Observable.forkJoin(jobSiteObservables);
} else {
**return Observable.of([]);**
}
})).do((result) => {
// ..
})
.switchMap(() => this.saveComments())
....
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.
Różnica w jednej linii:
let fruits = ['orange','apple','banana']
from : Emituj elementy po kolei z tablicy. Na przykład
from(fruits).subscribe(console.log) // 'orange','apple','banana'
of : Emituj całą tablicę naraz. Na przykład
of(fruits).subscribe(console.log) // ['orange','apple','banana']
UWAGA: od operatora mogą zachowywać się jak od operatora z operatorem spread
of(...fruits).subscribe(console.log) // 'orange','apple','banana'
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
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 sekwencja
const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3
of: Utwórz obserwowalne ze zmiennymi ilościami wartości, emituj wartości w kolejności, ale tablice jako pojedynczą wartość
const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5