2016-11-02 7 views
8

本質的に、タイトルには、httpコールを行うためにobservable over a promiseを使用する理由がありますか?すべてのコールが成功するか失敗するので、不必要なオーバーコンプリートのように見え、実質的にそれをキャンセルする本当の理由はありません。典型的な観測事例ではなく、debounceの売り上げ高ではない(皮肉なことに、ng-debounceは、とにかくうまくいって、無用な呼び出しをせずに)。プロミスとAngular2のHttpで観測可能か?

+0

さらに、私たちがより多くの加入者を持っているときにhttpコールが繰り返されるのを忘れることはありません。観察者を熱くすることができます。 –

+0

もっとも明白な理由は、Httpが約束ではなく観測可能なものを使用していることです。それは最少の努力の道です。 – estus

+0

https://groups.google.com/forum/#!topic/angular-data-dev/AdULPprCkbI –

答えて

7

ここではかなり関連性の高いオブザーバブルがあります。

Observableはキャンセルをサポートしていますが、Promiseはサポートしていません。

subscribe()map()を使用すると、then()の代わりに、私にはそれほど複雑なものはありません。 toPromise()を使用して、必要な場合はPromiseを取得することもできます。

詳細はAngular - Promise vs Observableも参照してください。

また、プログラミングのFRPスタイルが使用されている場合、どこでも観測可能にするのが便利です。それが望ましくない場合は、toPromise()を使用すると、Promiseと少しシンプルなAPIが得られます。

+3

は同意しますが、ストリームに登録すると、解決後にビヘイビアを追加する非同期関数を連鎖させることはできません。私の考えでは、http呼び出しではobservableが最善の選択ではなく、単純な約束で十分であり、連鎖可能な場合には定型文の作成につながります。 – Polochon

+0

'subscribe()'の代わりに 'map()'を使うだけです。あなたは 'toPromise()'を使うこともできますし、 'then()'を得ることもできます。観察可能なものであればすべてを手に入れることができますが、「約束(Promise)」では分かりません(IMHO)の部品しか手に入れません。 –

+1

また、[再試行](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/retry.md)によっていくつかの回復力が構築され、失敗したリクエストははるかに簡単です。 – JayChase

3

promiseとobservableの間の非常に基本的な違いは、Observableモジュールがサブスクリプションを持っていないと動作しないということです。サーバーへの負担が軽減されます。

本当に応答を利用しているかどうかに関わらず、要求とペイロードを使用してサーバーにpingを実行した後、約束オブジェクトを送信します。いつか望ましくない。

ノードは、他のサーバーの負荷を軽減するためのものです。

+1

どのような場合、レスポンスを使用せずに角度のHTTPコールを設定していますか?それは私には意味をなさない。私は遅延ロードを理解していますが、ここでどのように適用できるかはわかりません。失礼しようとするのではなく、なぜ人々がこれを議論の対象にしているのか、本当に分かりません。 – VSO

+2

これは要求が送信されるが、応答は無視されることを意味しません。あなたは、 'map()'、 'filter()'、 'replay()'、 'flatMap()'やその他のもので観測値を構築するメソッドを連鎖させることができますが、何らかの条件が満たされたときに、すべてまたは時には後で要求を出したい。これは、事前に準備してビルドしてオンデマンドでのみ、または繰り返し送信できるSQLクエリのようなものです。 –

+0

2人のクライアントがそれに加入していれば、それは2回働き、実際にそれが必要になるまで呼びを延期します。 –

関連する問題