Meine eckige Anwendung ist in 4 Module unterteilt und alle Module erfordern Benutzerdetails, so dass ich GetUser-Methode von jedem der Module aufrufen. Wenn also meine Anwendung alle 4 Module lädt, wird die getUser-API gleichzeitig ausgeführt, was zu 4 get-Anfragen auf dem Server führt. Wie kann ich das verhindern? Ich benutze Singleton-Muster in meiner getUser-Methode. Sobald mein Benutzer geladen ist, dient er einfach dem Benutzer von einem Objekt. Aber das löst das Problem nicht, wenn alle Module gleichzeitig nach dem Benutzer fragen.Handle simultan erhalten Anrufe in angularjs
Mein Code sieht wie folgt aus
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;
}
Fügen Sie den Anruf in einem Dienst hinzu. Der Dienst prüft, ob das Benutzerobjekt existiert. Wenn dies der Fall ist, gibt es das Objekt zurück - Wenn nicht, gib den get-Aufruf zurück. ** ODER ** Sie können den Anruf zwischenspeichern – Weedoze
Ich habe bereits die Methode nur im Dienst definiert und überprüft, ob das Benutzerobjekt existiert oder nicht. Aber wenn alle Module versuchen, den Benutzer gleichzeitig zu bekommen, funktioniert dieser Ansatz nicht. –
verwenden Sie UI-Router? .. Ich kann Ihnen vorschlagen, eine Auflösungsmethode im Routing zu verwenden und das Ergebnis der Anfrage an Ihren Controller zu übergeben. –