2016-08-02 27 views
0

Ich habe einen Service hier erklärt:

(function() { 
    'use strict'; 

    angular 
     .module('ngInterview.api.students') 
     .service('StudentsService', StudentsService); 

    StudentsService.$inject = ['$http']; 
    function StudentsService($http) { 

     /** 
     * Exposed functions 
     */ 

     this.getName = getName; // This function serves no purpose. It's just here as an example. 

     this.getStudents = function() { 
      console.log("getting to the getStudents function"); 
      return $http.get("http://il-resume-api.azurewebsites.net/api/students").then(function(res) { 
       console.log("getting data back"); 
       console.log(res.data); 
       return res.data; 
      }, function(res) { 
       console.log("getting bad data"); 
       console.log(res); 
       return res.data; 
      }); 
     } 

     /** 
     * Implementations 
     */ 

     function getName() { 
      return 'studentsService'; 
     } 
    } 
})(); 

Aus irgendeinem Grund nur der Code, die „die getStudents Funktion bekommen“ bekommt und reagiert nicht danach. Ich habe versucht, ein leeres Projekt mit $ http in einem Controller einzurichten und es funktioniert, es ruft die Daten vom Endpunkt ab, aber aus irgendeinem Grund wird dieser Dienst als Teil eines Moduls nicht. Und wenn ich console.log $ http, bekomme ich ein gültiges Objekt, also glaube ich nicht, dass es das ist.

+0

Unmittelbar nach 'console.log („immer auf die getStudents Funktion“);' Sie kommen von der Funktion zurück. Die zusätzlichen Ausdrucke zur Konsole werden erst nach Abschluss der HTTP-Anfrage ausgeführt. Versuchen Sie, das http.get innerhalb des Körpers aufzurufen, wenn die Funktion und die Funktion selbst zurückgibt. – FDavidov

+0

Behandeln Sie "getStudents" als Versprechen? Indem Sie das '$ http' zurückgeben, müssen Sie' then' mit Ihrer 'getStudents' Funktion verwenden, um ein Ergebnis zu erwarten. – AranS

Antwort

1

Ihre getStudents Funktion gibt die $http.get zurück. Auf diese Weise geben Sie ein Versprechen an diejenigen, die getStudents Funktion aufrufen. Wenn Sie Ihre Protokollierung in Aktion sehen, behandeln Sie Ihre Funktion entsprechend, wie folgt aus:

Steuerungsbereich

studentsService.getStudents().then(function() { 
    console.log("I expect to see my logs right above this log"); 
}) 
+0

Aber ich sollte immer noch meine console.logs, egal wie der Controller es behandelt, richtig? Nur um sicherzustellen, dass ich eine console.log in die .then-Anweisung des Controllers geschrieben habe, aber auch dort habe ich nichts bekommen. :/ –

+0

Sie sollten die Protokolle nur sehen, wenn die Funktion es versprochen und zurückgebracht hat, was auch immer es sein sollte. Können Sie die Logik des Controllers anzeigen? – AranS