2017-03-09 29 views
43

Observable.of ve Observable.from arasındaki bağımsız değişkenler mi? Function.prototype.call ve Function.prototype.apply gibi?RxJs Gözden geçirilebilir vs

Observable.of(1,2,3).subscribe(() => {}) 
Observable.from([1,2,3]).subscribe(() => {}) 

cevap

32

of ve from arasındaki farkı dikkat etmek önemlidir:

Observable.of([1, 2, 3]).subscribe(x => console.log(x)); 

kerede bütün dizi basacaktır. Öte yandan

,

Observable.from([1, 2, 3]).subscribe(x => console.log(x)); 

davranış aynıdır, ancak karakter düzeyinde dizeleri için 1.

tarafından elemanlarını 1 yazdırır.

+0

ne Observable.of (1, 2, 3) .subscribe (x => console.log (x)); – xiaoke

+0

@xiaoke Kesinlikle 3 ayrı emisyon var (1, sonra 2, sonra 3). –

34

Tam olarak değil. Bir dizi Observable.from geçirirken, Observable.of arasındaki tek fark, bağımsız değişkenlerin geçirilme şeklidir.

Ancak Observable.from bir abone olunabilen bir amacı, bir Promise, gözlenebilir bir benzeri, bir dizi, bir iterable veya bir dizi benzeri bir nesne

dönüştürülecek

bir argument kabul edecek

Observable.of için benzer bir davranış yoktur - her zaman yalnızca değerleri kabul eder ve dönüştürme gerçekleştirmez. (Dizeleri dahil), bir dizi benzer bir yapıya geçerken

1

Başka ilginç bir gerçek de Gözlemlenebilir.of ([]) abone olduğunuzda boş bir dizi olacaktır. Observable.from ([]) 'a abone olduğunuzda herhangi bir değer alamayacaksınız.

Bu, switchmap ile ardışık bir tasarruf yaptığınızda önemlidir. Örn: o

.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()) 
.... 

addSite bölümünde data.length = 0, yukarıdaki kodu Observable.of ([]) dönen ve eğer yorum kaydetmek gider. Ama onu Observable.from ([]) ile değiştirirseniz, sonraki yöntemler aranmayacaktır.

rxfiddle