2016-05-28 9 views
-1

Ich habe eine Fabrik, die den Kundendienst anrufen und bekommt die Antwort und vorbei in an die Steuerung und versucht, die Reaktion in einer Variablen zu speichern, dieundefined Service-Antwort in Controller in Variable mit Winkel speichern?

app.factory('Myservice', function (service1, service2) { 
    return { 
     getService: function (data) { 
      service1("user", encodeURIComponent("pass")).then(function (response) { 

       varSessionData = response.Obj; 

       var queryString = strURL[1].split("&"); 

       Service2.pageLoad(SessionData).then(function (response) { 
        var homeScreen = response; 

        data(homeScreen); 
       }); 
      }); 
     } 
    }; 
}); 

In-Controller ist nicht definiert zu werden:

var Mydata = MyService.geService(function (data) { 
    Console.log(data); 
    return data; // getting response 
}); 

$scope.Hello = Mydata; // undefined 

Antwort

0

Ändern Sie es in den folgenden, Ihre Daten sind nicht synchron definiert.

Controller:

MyService.geService(function(data) { 
    $scope.Hello = data; 
}); 
+0

ich habe die $ scope.Hello in einer anderen Service-Controller übergeben, was bedeutet, hängt davon ab, dass das Ergebnis Service3.pageLoad ($ scope.Hello) .then nehmen (function (Antwort) { $ scope.ServiceModelobj = Antwort; console.log (Antwort); } –

0

Wann immer Sie machen jede A JAX Anfrage sie asynchron sind. Deshalb werden Winkelversprechungen verwendet (die .then Methode).

MyService.geService(function (data) { 
    Console.log(data); 
    $scope.Hello = data; 
}); 
0

i die $ scope.Hello in einer anderen Service-Controller übergeben haben, die auf die Einnahme des Ergebnisses von Diensten abhängig bedeutet: So dass Sie Ihren Code wie folgt in Ihrem Controller ändern sollte.

Nicht funktioniert?

var HomeController = function ($scope, $rootScope, $http, $stateParams, $state, Service3, Myservice) 
{ 

MyService.geService(function (data) { 
    Console.log(data); 
    $scope.Hello = data; 
}); 

Not working 
    Service3.pageLoad($scope.Hello) // not get the value 
     .then(function (response) { 

      $scope.ServiceModelobj = response; 
      console.log(response); 
} 

Arbeits Code

var HomeController = function ($scope, $rootScope, $http, $stateParams, $state, Service3, Myservice) 
{ 

MyService.geService(function (data) { 
    Console.log(data); 
    $scope.Hello = data; 

Working// 
    Service3.pageLoad($scope.Hello) // get the value 
     .then(function (response) { 

      $scope.ServiceModelobj = response; 
      console.log(response); 

}); 
} 
} 
+0

In Ihrem ersten Beispiel wird die erste Dienstmethode ausgeführt, und die zweite Dienstmethode wird sofort ausgeführt, bevor der erste Aufruf hat aufgelöst. In Ihrem zweiten e Beispiel: Sie rufen den zweiten Service innerhalb des Callbacks des ersten Service an, der zu diesem Zeitpunkt definiert wurde. – Lee

+0

Im zweiten Beispiel habe ich Second-Service innerhalb des ersten Service das ist was seine Rückkehr ok, aber meine Frage gibt es eine andere Möglichkeit, die erste Service-Antwort global, die ich nicht den zweiten Service innerhalb geben wollen erster Service. Siehe erstes Beispiel in undefined Ich muss den Wert tats mein Problem bekommen. –

Verwandte Themen