Einer meiner AngularJS Controller enthält die folgende Zeile:für Versprechen vor dem Laden Ressource zu lösen Warten
api.tickets.query()
das api
Modul enthält diese:
angular.module('myapp.api', [
'ngResource'
])
.factory('api', function($resource, applicationsService) {
function fetchAppId() {
return applicationsService.getCurrentApp();
}
return {
tickets: $resource('tickets', {
applicationId: fetchAppId
}),
...
}
applicationsService.getCurrentApp() macht einen $ http Aufruf selbst. So können Sie vielleicht das Problem sehen - dieser Aufruf wurde möglicherweise nicht durch die Zeit behoben, die fetchAppId() zurückgibt.
Wie kann ich das umgehen?
Bingo, danke Maxim, das hat wie ein Zauber funktioniert. Schätze die Geige und das Detail :) –
Ich denke, es funktioniert, weil Versprechen in $ scopes auf den $ apply() Zyklus warten, um zu beenden. In der Dokumentation heißt es: "$ q ist mit dem $ rootScope.Scope Scope Modellbeobachtungsmechanismus in eckig integriert, was eine schnellere Verbreitung der Auflösung oder Ablehnung in Ihre Modelle und die Vermeidung unnötiger Browser-Repaints bedeutet, was zu einer flackernden Benutzeroberfläche führen würde." – Plap
Wenn jemand $ Ressource für eine Anfrage verwendet, dann müssen wir $ promise fetchAppId(). $ Versprechen.then (Funktion (Daten) {----}); –