1. ホーム
  2. javascript

[解決済み] RxJSのシーケンスはpromise.then()と同等か?

2023-04-08 08:56:12

質問

以前はpromiseを使ってよく開発していましたが、今はRxJSに移行しています。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 ):

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
  });

プロミスは、次のようにして observable に変換することができます。 Rx.Observable.fromPromise .

いくつかのプロミス演算子は直訳が可能です.例えば RSVP.all または jQuery.when で置き換えることができます。 Rx.Observable.forkJoin .

非同期にデータを変換し、プロミスではできないか非常に困難なタスクを実行することを可能にする演算子の束を持っていることに留意してください。Rxjsはデータの非同期シーケンス(シーケンスすなわち、1つ以上の非同期値)でそのすべての力を明らかにします。

エラー管理については、主題はもう少し複雑です。

  • があります。 キャッチ 最後に 演算子も
  • retryWhen は、エラーが発生した場合にシーケンスを繰り返すのにも役立ちます。
  • を使えば、サブスクライバー自身のエラーに対処することもできます。 onError 関数で対処できます。

正確なセマンティクスについては、ウェブで見つけられるドキュメントや例をより深く見るか、ここで具体的な質問をしてみてください。

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