2016-05-10 11 views
0

Ich möchte die service(MyService.postData) nur anrufen, nachdem alle Funktionen in der Fabrikfunktion (MyFactory.getData) vorbei sind.Warten auf Rückmeldung von der Fabrik, dann weiter zum Serviceanruf

Der Rückgabewert von der Fabrik ist immer falsch oder nicht definiert ist und ich erhalte eine Fehlermeldung zum Senden des Service-Aufrufs:

1. Zuerst eine Funktion definieren, in der Fabrik nennt, die für die Anmeldung in einem Benutzer verwendet wird, durch eine Pop-up-Vorlage

2. Zweitens nur, wenn der Benutzer angemeldet ist, wird der folgende Service-Aufruf vorgenommen werden:

//My AngularJS controller is something like 
    myApp.controller("firstCtrl", function($scope, MyFactory, MyService) { 
     $scope.value = MyFactory.getData(); 
     if($scope.value){ 
      MyService.postData("url",params).then(function(){ 
       //do something 
      }); 

    }); 

    //My AngularJS factory is something like 
    myApp.factory("MyFactory",function(){ 
     return { 
      getData: function(){ 
       //open pop up to login 
       //close pop up get confirmation 
       return true; 
      } 
    }); 

    //My AngularJS service is something like 
    myApp.service("MyService",function($http){ 
    //do something 
    }); 
+0

Die getData in der Fabrik sollte Versprechen basieren. Dann können Sie den Aufruf MyService.postData in seinen then-Block verschieben. – rivarolle

Antwort

0

Verwenden Sie $http?

myApp.factory("MyService", ["$http", function($http){ 
    return { 
     getData: function(url) { 
      return $http.get(url); 
     }, 
     postData: function(url, payload) { 
      return $http.post(url, payload); 
     } 
    }; 
}]); 

Dann

myService.getData(url).then(function(response) { 
    var payload = { 
     item: response.data.someItem; 
    }; 
    var url2 = '/path/to/somewhere/'; 

    myService.postData(url2, payload).then(function(response) { 
     alert('ok'); 
    }).catch(function(response) { 
     alert('error2'); 
    }); 
}).catch(function(response) { 
     alert('error1'); 
}); 
+0

Nein Ich verwende nicht http in meiner Fabrik, alle meine Serviceanrufe sind von Service. – twitch

+0

Warum leben 'postData()' und 'getData()' an zwei verschiedenen Orten? – Kyle

+0

Holen Sie sich Daten ist nur ein zufälliger Name vorstellen, wie es für die Anmeldung überprüfen, die ein Pop öffnen, das ist es. Die ganze Logik ist in einem anderen Controller. Meine Fabrik speichert und aktualisiert nur Werte. Auf der anderen Seite macht mein Service alle Service-Anrufe – twitch

Verwandte Themen