2015-12-30 9 views
37

私は約束を持って多くを開発していましたが、今ではRxJSに移行しています。 RxJSの文書は、プロミス・チェーンからオブザーバ・シーケンスへの移行方法に関する非常に明確な例を提供していません。例えばpromise.then()に等しいRxJSシーケンス?

// a function that returns a promise 
getPromise() 
.then(function(result) { 
    // do something 
}) 
.then(function(result) { 
    // do something 
}) 
.then(function(result) { 
    // do something 
}) 
.catch(function(err) { 
    // handle error 
}); 

がどのように私はRxJSスタイルでこの約束チェーンを書き換える必要がありますように、私は通常、複数のステップを約束チェーンを書くのか? (thenに相当)データフローの

答えて

42

Rx.Observable.fromPromise(...) 
    .flatMap(function(result) { 
    // do something 
    }) 
    .flatMap(function(result) { 
    // do something 
    }) 
    .subscribe(function onNext(result) { 
    // end of chain 
    }, function onError(error) { 
    // process the error 
    }); 

約束はRx.Observable.fromPromiseで観察可能に変換することができます。

有望なオペレータには、直接翻訳があります。例えば、RSVP.allまたはjQuery.whenは、Rx.Observable.forkJoinで置き換えることができます。

データを非同期に変換したり、約束ではできないタスク、または約束することが非常に難しいタスクを実行できる演算子がたくさんあることに注意してください。 Rxjsは非同期のデータシーケンス(シーケンス、すなわち2つ以上の非同期値)を用いてすべての権限を明らかにする。

エラー管理の場合、対象は少し複雑です。

  • catchfinally事業者があまりにも
  • retryWhenがあるにもあなたもonError機能を加入者自体のエラーに対処することができ、エラー
  • の場合のシーケンスを繰り返すことができます。

正確なセマンティクスについては、ウェブ上のドキュメントや例を詳しく見てください。

これは間違いなくRxjsとエラー管理に深く行くための良い出発点のようになります。https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/creating_and_querying_observable_sequences/error_handling.html

+0

私は常に観察可能なシーケンスは、サブスクライブ()で終わるご覧ください。これは観測可能なオブジェクトの関数でしかないので、これを行う理由は何ですか?シーケンスを開始する機能ですか? –

+0

まさにそうです。観測者が購読を通過していない場合、あなたの観測データはデータを送信しないので、データフローは表示されません。 – user3743222

+5

私はこれを見てお勧めします:https://gist.github.com/staltz/868e7e9bc2a7b8c1f754。公式の医者よりも美味しいかもしれません。 – user3743222

関連する問題