2016-04-21 9 views
1

リクエストを適切に処理し、APIリクエストに対して標準エラー処理を実行するAPIを呼び出すサービスを提供したいと考えています。例えば、私はAPI呼び出しがエラーを起こしたときに呼びたいApiErrorsServiceを持っています。私は標準的な方法、すなわちContent-Typeをapplication/jsonに設定し、要求オブジェクトをシリアライズすることで呼び出しを提出することも望みます。角度2のHttpを2回購読しますか?

もちろん、Httpから返されたオブザーバブルを購読すると、それは一度呼び出され、返されたときに呼び出し元が購読すると、再び呼び出されます。 APIコールを2回実行せずに2か所で結果をリッスンできる最善の方法は何ですか? .publish()または.share()に電話して返すことはできますか?私はそれを処分する必要がありますか?発生するタイミングの問題はありますか?私がAPI呼び出しを擬似してすぐに値を返すと、正常に動作するか、呼び出し元のサブスクリプションが値を逃してしまいますか?

post(path: string, data: any): Observable<Response> { 
    var headers: Headers = new Headers(); 
    headers.set("Content-Type", "application/json"); 
    var s = data == null ? null : JSON.stringify(data, null, 2); 
    var shared = this.http.post(path, s, { headers: headers }).share(); 
    shared.subscribe(null, err => this.appErrorsService.addApiError(err)); 
    return shared; 
} 

答えて

2

shareを使用することは過剰です。エラーをインラインで処理したい場合は、代わりにdoを使用してください。

return this.http.post(path, s, { headers: headers }) 
    .do(null, err => this.appErrorsService.addApiError(err)); 
2

shareを使用して登録を解除する必要はありませんので、自動的に完了する観察可能なHTTP、十分なされています。ここで私が持っているコードです。非同期メソッド(setTimeout/etc)で2番目のリスナーを登録しない限り、値を見逃す方法はありません。

関連する問題