web-dev-qa-db-ja.com

なぜAngularはHttpClientにObservableを使用するのですか?

https://angular.io/tutorial/toh-pt6 による

一般に、オブザーバブルは時間の経過とともに複数の値を返す可能性があります。 HttpClientからのオブザーバブルは、常に単一の値を発行してから完了し、二度と発行することはありません。

確かにそうですが、リクエストが完了すると、Httpリクエスト/レスポンスはそれ以上値を生成できなくなります。では、HTTPClientがリクエストの実行中にObservableを返す主な理由は何ですか? Observableに膨大な数の演算子(再試行、デバウンスなど)を適用できるからですか?または私が行方不明になっている他の特定の理由はありますか?

13
Namit

あなたが見つける最良の答えは Pascal Precth の2015年12月に尋ねられた専用の問題で「Observablesはhttpにとって意味がありますか?」と説明した人です。 (しかし、自由に読んでください、たくさんの追加の答えも本当に良いです!)

頭の上:
-再試行
-キャンセル
-すべてのRxjs演算子をお楽しみください
-それらをストリームとして組み合わせる可能性
-アプリ全体で反応的に考える
-一貫性
-オブザーバブルは本質的に冷たいので、後でトリガーしたい場合は、Promisesのようにファクトリ関数にラップする必要はありません。

11
maxime1992

Observablesは、Angularフレームワークの標準の非同期ハンドラーです。

標準では、オブザーバブルは、非同期パイプ、ルーティングガード、ルーティングリゾルバー、コンポーネントイベントエミッター、およびその他の多くの場所でサポートされていることを意味します。

Angularチームは、これらの機能の多くのフォールバックとしてプロミスをサポートするために多大な努力を払ってきましたが、内部では、これらのプロミスはとにかくオブザーバブルに変換されます。

Httpリクエストを監視可能にすることで、Angularチームは、コア内の非同期操作を他のすべてと一致させています。

約束よりもオブザーバブルにはまだいくつかの利点がありますが、これは主に意見が分かれています(私自身の意見のように)。

  • サービス内でHttpリクエストとWebSocketを簡単に組み合わせて、APIをオブザーバブルとして公開できます。サービスの利用者は違いを知りません。
  • 配列のHttpリクエストを、各アイテムを個別に発行するオブザーバブルに簡単に変換できます。これにより、さまざまなコンシューマーへのデータのディスパッチがはるかに簡単になります。
  • 約束は、適切に連鎖されていないと壊れることがあります。これらの一般的なバグは、多くの場合、オブザーバブルで回避されます。
4
Reactgular

APIの一貫性を維持するため。たとえば、Promiseを導入する必要はありません。とにかく、ObservablesはPromisesよりも柔軟性があります。さらに、observableはそのサブスクライバーを追跡できます。 HttpClientの場合、サブスクライバーが表示されたら呼び出しが行われます。 httpコールを購読しない場合、リクエストは行われません。

そのため、1つのオブザーバブルを複数回サブスクライブすると、複数のリクエストが行われます。

3
Antoniossss