2016-05-02 4 views
1

Ich benutze 2 Service in Controller First Service ist AjaxResponse zu bekommen, wo Logik zum Abrufen der Antwort erwähnt wird Der zweite Service ruft den ersten Dienst, um HTTP-Anfrage zu machen und Ergebnis, und dann wieder an die Steuerungwie Ajax Antwortwert vom Dienst abrufen?

Ctrl Abhängigkeit injiziert Firstservice, secondService

this.getService = secondService.getData(param); 

First Service -> First

this.httpResponse(param){ 
    var re = $http.get(param); 
    return re.then(success,fail); 
} 
function success(data){ 
    return data; 
} 
function fail(data){ 
    console.log(data); 
} 

Second Service (Dependency Injection von First Service)

function secondService(firstService){ 
    this.getData = function(param){ 
     return firstService.httpResponse(param); 
    }; 
} 

this.getService kommt als nicht definiert, alle der Anruf geht richtig.

versucht auch den folgenden Code:

secondService.getData(param).then(function(data){console.log(data);}); 

das auch nicht helfen.

Antwort

0

Gebrauchte Rückruf der result.It zu erhalten ist, ähnlich wie die latenten (Versprechen)

0

Sie sollten die Versprechen in diesen Situationen verketten.

Zuerst definieren Sie Ihren Service. Es sollte zwei verschiedene Funktionen enthalten. Als Beispiel habe ich eine GET und eine POST gemacht.

angular.module("myApp",[]).factory("SharedServices", function($http) { 
    return { 
     getItem: function() { 
      return $http.get('path/to/api'); 
     }, 
     postItem: function(payload) { 
      return $http.post('path/to/api', payload); 
     } 
    }; 
}); 

Dann referenzieren Sie den Service in Ihrem Controller. getItem() gibt ein Versprechen zurück, wo Sie es verwenden können, .then zu verwenden, um Ihren zweiten Dienst in dem Erfolgsrückruf aufzurufen.

angular.module("myApp",[]).controller("MainCtrl", function($scope, SharedServices) { 
    SharedServices.getItem().then(function(response) { 
     //success, got something 
     //call the second part 
     var payload = { myPayload: response.data.someItem }; 
     SharedServices.postItem(payload).then(function(response) { 
      //success 
     }, function(response) { 
      //an error has occurred to the second call--POST 
     }); 
    }, function(response) { 
     //an error occurred to the first call--GET 
    }); 
}); 
+0

Das ist nicht meine Sorge, der Service einen anderen Dienst aufrufen Antwort erhalten –

+0

Sie sollten nicht verschachtelt '$ http' ruft innen Dienstleistungen. Trennen Sie diese Verantwortlichkeiten, Bruder. Sie sollten diese Versprechen stattdessen verketten. – Kyle

+0

Kann es nicht tun, gibt es einen anderen Weg, es zu tun. –