2016-07-21 25 views
0

Im Speichern in einer Variablen ein boolescher Wert, um zu überprüfen, ob ein Benutzer admin ist oder nicht, in meiner Funktion, die ich den Dienst aufrufen kann ich den Ergebniswert (wahr oder falsch), aber als in der Variablen vm.isAdmin im Erhalten eines undefined.Funktion Service Rückgabe undefined

vm.isAdmin = accountType("admin"); 
function accountType(type){ 
    UserService.isAccount(type).then(
     function (result) { 
      console.log("result"); 
      console.log(result); 
      return result; 
     } 
    ); 
} 

Antwort

1

UserService.isAccount Renditen versprechen und Sie es verwenden, um in dann Methode anonyme Funktion Einstellung aber Ihre Hauptfunktion ist nicht das gleiche, anonyme Funktion in Funktion account verwendet wird, wird asynchron so ergeben aufgerufen, nachdem Ihre Funktion account viel sein wird enden. Ihre accountType-Funktion sollte auch Versprechen zurückgeben oder Callback-Funktionen verwenden.

Versuch dazu diese Weise (Callback-Funktionen):

 function accountType(type,funcYes,funcNo){ 

      UserService.isAccount(type).then(
       function (result) { 

        if (result===type)//change this if 
        funcYes(); 
        else 
         funcNo(); 

       } 
      ); 
     } 

Beispiel Nutzung:

accountType("admin",function(){ 
    //code for yes 
    },function(){ 
    // code for no 
    }); 
+0

Ich habe es bereits gemacht, aber immer noch geben mir eine "c {$$ state: Object}" – Pedro

+0

Sie werden nie boolean, boolean kann in Funktion, die nach dem Versprechen aufgerufen werden zugewiesen werden. Promise ist asynchron, Sie müssen verstehen, dass die asynchrone Funktion nicht in der Zeile aufruft, in der sie sich im Code befindet, sie läuft einige Zeit später im selben Bereich ab. Überprüfen Sie meinen Code und versuchen Sie es. –

1

UserService.isAccount scheint ein Versprechen zurück, so dass Sie es auf diese Weise verwenden:

UserService.isAccount('admin') 
.then(function (result) { 
     vm.isAdmin = result; 
    }); 

Also, dass das Ergebnis zugewiesen wird, wenn es verfügbar ist.