次のサービスからのhttpリクエストの結果を複数のコンポーネントと共有しようとしています。私が経験している問題は、各コンポーネントのgetMe()関数に対する要求が新しいhttp呼び出しを作成することです。 MeServiceサービスは、ページのルートモジュールのプロバイダとして宣言され、各* .component.tsにインポートされるため、サービスを複数回プロバイダ全体として再宣言した(共通の)間違いが原因ではありません子コンポーネント。出力からわかるように、コールの非同期性のために発生している可能性が高くなりますが、間違っていれば私を修正します。Angular2サービスで複数のhttpリクエストを緩和する
import { Injectable } from '@angular/core';
import { Headers, Http } from '@angular/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class MeService {
private apiUrl = 'api/get/me';
private me: Object;
constructor(private http: Http) { }
getMe(): Promise<Object> {
console.log("OBSERVATION 1: " + this.me);
if (this.me) {
//Not sure if this is correct or not, I've never reached this block yet
return Promise.resolve(this.me)
} else {
return this.http.get(this.apiUrl)
.toPromise()
.then(response => {
console.log("OBSERVATION 2: " + this.me);
this.me = response.json();
console.log("OBSERVATION 3: " + this.me);
return this.me
})
.catch(this.handleError);
}
}
//Not relevant, just for completeness
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
}
出力コンソールで:ここで
は、サービスコードです。 [オブジェクトオブジェクト]が正しいデータで満たされていることを念頭に置いて、これをチェックして分かりやすくするためにJSON.Stringify()を省略しました。
観測1:不定
観測1:不定
観測2:未定義
観測3:[対象オブジェクト]
観測2:[対象オブジェクト]
観測3:[オブジェクトオブジェクト]
私が考えているのは、httpコールが返される前にAngularコンポーネントがロードされているため、ブートストラップ時に複数のリクエストが発生するということです。これを緩和する正しい、最良の方法は何でしょうか?
これを正解とすると、この実装につながりました。[http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result- of-an-angular-2-http-network-call-in](http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an -angular-2-http-network-call-in/36291681#36291681) –