Yanıtlar:
Pek değil. Bir diziyi geçirirken Observable.from
, onunla arasındaki tek fark Observable.of
, bağımsız değişkenlerin geçirilme şeklidir.
Ancak, Observable.from
bir kabul edecek argüman olduğunu
dönüştürülebilen bir abone nesnesi, bir Söz, Gözlenebilir benzeri, Dizi, yinelenebilir veya diziye benzer bir nesne
Her Observable.of
zaman yalnızca değerleri kabul eden ve dönüşüm gerçekleştirmeyen benzer bir davranış yoktur.
Dizi benzeri bir yapı (dizeler dahil) geçirilirken of
ve from
geçirilirken fark edilmesi önemlidir :
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
tüm diziyi aynı anda basar.
Diğer yandan,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
elemanları 1'e 1 yazdırır.
Dizeler için davranış aynıdır, ancak karakter düzeyindedir.
Bir başka ilginç gerçek de Observable.of ([]), abone olduğunuzda boş bir dizi olacaktır. Observable.from ([]) 'a abone olduğunuzda herhangi bir değer elde edemezsiniz.
Switchmap ile ardışık bir işlem yaptığınızda bu önemlidir.
Örn: Aşağıdaki örnekte, bir işi ve ardından siteleri kaydediyorum ve ardından akış olarak yorum yapıyorum.
.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())
....
kaydedilecek bir site yoksa; addSite bölümünde data.length = 0, yukarıdaki kod Observable.of ([]) döndürüyor ve ardından yorumları kaydetmeye gidiyor. Ancak bunu Observable.from ([]) ile değiştirirseniz, sonraki yöntemler çağrılmaz.
Bir satır farkı:
let fruits = ['orange','apple','banana']
from : Öğeleri birer birer diziye yayar. Örneğin
from(fruits).subscribe(console.log) // 'orange','apple','banana'
arasında : aynı anda dışarı verir bütün dizi. Örneğin
of(fruits).subscribe(console.log) // ['orange','apple','banana']
NOT: bir operatör olarak davranabilir gelen operatöre yayılmış operatörü
of(...fruits).subscribe(console.log) // 'orange','apple','banana'
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
from
: Dizi, söz veya yinelenebilir gözlemlenebilir oluşturun. Sadece bir değer alır. Diziler, yinelenebilirler ve dizeler için, içerilen tüm değerler bir dizi olarak yayılır
const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3
of
: Değişken miktarda değerlerle gözlemlenebilir oluşturma, değerleri sırayla yayınlama, ancak tek değer olarak diziler oluşturma
const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5