Angular2のObservableを活用しようとしていますが、map()
をsubscribe()
よりも使用する必要がある理由について混乱しています。このようなwebApiから値を取得しているとします
this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
subscribe(success, error, complete)
を使用して、成功コールバックですべての値を取得し、完了コールバックで値を返すことができます。これらすべての機能を実行できる場合、map()
の必要性は何ですか?利点はありますか?
要するに、なぜこのように書くべきなのか:
this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
.map(r=>{})
.subscribe(value => {
}, error => error, () => {
});
マップ関数なしで単純にこれを書くことができる場合:
this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
.subscribe(value => {
}, error => error, () => {
});
Observable
を返す場合、他のコードがサブスクライブできますが、現在のメソッドでデータイベントを操作する場合は、map
を使用します。
オブザーバブルの実際のユーザーは、subscribe()
が必要です。なぜなら、subscribe()
がなければ、オブザーバブルはまったく実行されないからです。 (forEach()
またはtoArray()
およびおそらく他のものも同様に動作して、subscribe()
の代わりにobservableを実行します)
subscribe()
は、サブスクライブできないSubscription
を返しますが、サブスクリプションをキャンセルするために使用できます。
map()
は、サブスクライブ可能なObservable
を返します。
応答を変換するミドルウェアとしてマップを考えてください。
this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
.map(r=>r.json())
.subscribe(result => {
// here result would have json object that was parsed by map handler...
},failurCallback,completeCallback)
subscribeはobservableを呼び出すために使用されます。 cold-vs-hot-observables の良いドキュメントを読んでください
非同期リクエストを実行するには、subscribe
が必要です。 map
を設定した場合-要求はトリガーされません。確認してもいい。
多くのサブスクライバーが結果を使用できるため、map
を使用してデータを前処理することをお勧めします。したがって、各クライアント(サブスクライバー)に前処理を追加する代わりに、すべてのデータスキーマで単一の出力を準備できます。
.map()
はrxjs演算子で、配列[]
の結果を表示します.json()
の形式