2

Ich habe ein employeeController bekam und eine employeeFactory im employeeFactory erhalte ich eine employee wie folgt aus:AngularJS erhalten Mitarbeiter von der Fabrik

function employeeFactory(authenticationFactory,requestFactory,GLOBALS) { 
     var factory = {}; 
     var vm = this; 
     vm.employee = {}; 

     factory.getEmployee = function(id) { 
      data = {"api_token": authenticationFactory.getToken()}; 
      url = GLOBALS.url + 'show/employee/' + id; 
      requestFactory.post(url, data) 
       .then(function (response) { 
        return vm.employee = response.data.result.Employee; 
       }, function() { 
        $window.location.assign('/'); 
       }); 
     } 
     return factory; 
    } 

In meinem Controller Ich versuche es so zu erhalten:

console.log(employeeFactory.getEmployee($routeParams.id)); 

Aber das Ergebnis ist null?

Wenn ich console.log die Antwort in meinem requestFactory erhalte ich ein employee Objekt. Was mache ich falsch?

Antwort

3

Grund dahinter ist, vermisst man Versprechen requestFactory.post von factory.getEmployee Methode zurückzukehren

-Code

factory.getEmployee = function(id) { 
    data = {"api_token": authenticationFactory.getToken()}; 
    url = GLOBALS.url + 'show/employee/' + id; 
    return requestFactory.post(url, data) 
    .then(function (response) { 
     return vm.employee = response.data.result.Employee; 
    }, function() { 
     $window.location.assign('/'); 
    }); 
} 

Aber auch wenn Sie es tun, werden Sie nicht in der Lage Wert employee Objekt zu erhalten gedruckt . Es wird Versprechen Objekt Rückkehr nach $http.post Methode/$resource Methode

Für habhaft auf dieses Objekt Sie .then Funktion über dieses Versprechen Objekt verwenden müssen gedruckt werden. wie unten

employeeFactory.getEmployee($routeParams.id).then(function(employee){ 
    console.log('Employee', employee) 
}) 
+0

Danke, das funktioniert. – Jamie

+1

@jamie Froh, Ihnen zu helfen .. Danke :-) –

0

Wir latenten api in AngularJS für eine bessere Kommunikation zwischen Anrufer und Service nutzen können.

factory.getEmployee = function(id) { 
var deferred = $q.defer(); 
    data = {"api_token": authenticationFactory.getToken()}; 
    url = GLOBALS.url + 'show/employee/' + id; 
    return requestFactory.post(url, data) 
    .then(function (response) {  
      deferred.resolve(response.data.result.Employee); 
    }, function() { 
     deferred.reject(); 
    }); 
    return deferred.promise; 
} 

auf dem Controller:

employeeFactory.getEmployee($routeParams.id).then(function(employee){ 
    console.log('Employee', employee) 
},function(){ 
$window.location.assign('/'); 
}) 

Durch diesen Ansatz, den wir Anrufer mit einigen Nachrichten, wenn Ihre Antwort verzögert wird benachrichtigen können. Weitere Informationen finden Sie unter diesem Link. angular promises

+0

Was Sie verwendet haben, ist Antipattern der Verwendung von Versprechen .. –

Verwandte Themen