2017-03-09 7 views
43

Observable.ofObservable.fromの引数の形式は唯一の違いはありますか? Function.prototype.callFunction.prototype.applyのように?RxJs vsからの見方

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

答えて

32

offromとの間の差を注意することが重要である:

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

一度にアレイ全体を印刷することになります。一方

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

は挙動は同じであるが、文字レベルでの文字列の1

により要素1を印刷します。

+0

何Observable.of(1、2、3).subscribe場合(X =>にconsole.log(X)); – xiaoke

+0

@xiaokeそれでは、必ず3つの別々の排出物(1、2、そして3)です。 –

34

Observable.fromに配列を渡すとき、それとObservable.ofの唯一の違いは、引数が渡される方法です。

しかし、Observable.fromはサブスクライブオブジェクト、プロミス、観測状、アレイ、反復可能またはアレイ状の物体が

を変換する

あるargument受け入れます

Observable.ofの場合と同様の動作はありません。常に値のみを受け入れ、変換を実行しません。 (文字列を含む)アレイ状の構造を通過する際

1

もう1つの興味深い事実は、Observable.of([])は、購読すると空の配列になります。 Observable.from([])を購読したときには、値は取得されません。

これは、switchmapで連続して保存する場合に重要です。 例:

.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セクションにdata.length = 0であれば、上記のコードはObservable.of([])を返すと、次にコメントを保存するために進みます。しかし、Observable.from([])で置き換えると、後続のメソッドは呼び出されません。

rxfiddle

関連する問題