2016-05-06 8 views
0

Vielen Dank für das Lesen dieser Frage. Ich mache AngularJS App. Ich habe einen Status erstellt und eine Auflösung definiert, die User.getProfile aufruft, das im Benutzerdienst definiert ist. Diese Lösung funktioniert also, wenn der Dienst zum Abrufen des Profils erfolgreich ausgeführt wurde, aber nicht funktioniert, wenn ein Fehler aufgetreten ist. lassen Sie mich einen Code veröffentlichen.Wie löse ich den Status, wenn der Service fehlgeschlagen ist

.state('app.profile', { 
     url: '/profile', 
     views: { 
      'menuContent': { 
       templateUrl: 'views/pages/profile.html', 
       controller: 'ProfileCtrl', 
      } 
     }, 
     resolve: { 
      data: function(User) { 
       return User.getProfile(); 
      } 
     } 
    }) 

und hier ist Service definiert.

service.getProfile = function() { 
     var deferred = $q.defer(); 

     HttpReq.sendRequest(RESTAPI.DEV_URL + RESTAPI.PROFILE, 
      'GET', 
      undefined, 
      function(result) { 
       /* 

       */ 
       if (result.success) { 
        deferred.resolve(result); 
       } 
       else { 
        deferred.reject(result); 

       } 

      }, 
      function(error, response) { 
       deferred.reject(error); 

       //uiHelper.alert($scope, 'Login Error', response.message); 
     }); 

     return deferred.promise; 
    }; 

app.profile wird aufgelöst, wenn defer.resolve im Dienst aufgerufen wird. wird jedoch nicht aufgelöst, wenn defer.reject aufgerufen wird. Bitte korrigieren Sie mich, wenn ich Probleme mit dem Versprechen habe.

Danke!

+0

ich es nicht bekommen, tatsächlich können Sie den Status abrufen, indem Sie die 'then' Syntax' '' User.getProfile() dann (successCallback, errorCallback). '' ', Weil Sie tatsächlich zurückkehren ein Versprechen, ich weiß nicht, wie Sie es verwenden werden –

+0

das ist nicht was ich wollte. –

+0

es ist nicht wirklich klar, was Sie wollen –

Antwort

2

Wenn die Auflösungsfunktion fehlschlägt, möchten Sie dem Benutzer wahrscheinlich etwas anzeigen (wie eine Fehlermeldung). Es wäre besser, wenn Ihre Auflösungsfunktion eine Zusage (ohne dann) zurückgibt und das interne Ereignis $ routeChangeError verwendet.

myApp.run(['$rootScope',function($rootScope) { 
    $rootScope.$on('$routeChangeError', function() { 
    // what you want to do if an error occurs 
    // ex: $rootScope.displayErrorMessage = true 
    }); 
}]); 
+0

guter Punkt! Aber gibt es eine Möglichkeit, den Zustand unabhängig von der Entschlossenheit zu ändern? –

Verwandte Themen