私の角型アプリケーションは4つのモジュールに分かれており、すべてのモジュールはユーザーの詳細を必要とするため、各モジュールからgetUserメソッドを呼び出しています。したがって、アプリケーションが4つのモジュールすべてをロードすると、getUser APIが同時に起動し、サーバー上で4つのget要求が発生します。どうすればこれを防ぐことができますか?私はgetUserメソッドでシングルトンのパターンを使用しているので、ユーザーがロードされると、単にオブジェクトからユーザーを提供します。しかし、すべてのモジュールが同時にユーザーを要求しても問題は解決しません。anglejsで同時呼び出しを処理する
私のコードは、同じ要求の約束を返します変数にUserService.get
への呼び出しを、現在の要求を格納することにより、この
getUser() {
let defer = this.q.defer();
if (!this.user) {
this.http.get(`${this.config.apiHost}users`)
.success(result => {
this.user = result;
this.rootScope.$broadcast('userFound', this.user);
defer.resolve(this.user);
})
.error(err => defer.reject(err))
}
else {
defer.resolve(this.user);
this.rootScope.$broadcast('userFound', this.user);
}
return defer.promise;
}
サービス内でコールを追加します。サービスは、ユーザーオブジェクトが存在するかどうかをチェックします。そうであれば、オブジェクトを返します。そうでなければ、get呼び出しを返します。 ** OR **あなたはコールをキャッシュすることができます – Weedoze
私は既にサービスで定義されたメソッドを持っていて、ユーザーオブジェクトが存在するかどうかをチェックします。しかし、すべてのモジュールが同時にユーザーを獲得しようとすると、このアプローチは機能しません。 –
あなたはui-routerを使用しますか? ..私はルーティングで解決方法を使用し、あなたのコントローラに要求の結果を渡すことを提案することができます。 –