2016-07-21 122 views
0

林存儲在一個變量的布爾值來檢查,如果用戶是管理員或不是,在我的功能,我稱之爲我可以接受的結果值(true或false)的服務,但比變量vm.isAdmin即時通訊未定義。功能服務返回undefined

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

回答

1

UserService.isAccount回報的承諾,你在隨後的方法設置匿名函數使用它,但你的主要功能是不是在ACCOUNTTYPE功能使用的相同,匿名函數被調用異步的結果將是你的函數ACCOUNTTYPE經過多番會停。您的accountType函數也應該返回promise,或使用回調函數。

嘗試這種這種方式(回調函數):

 function accountType(type,funcYes,funcNo){ 

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

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

       } 
      ); 
     } 

用法示例:

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

我已經做到了,但還是給了我一個「C {$$狀態:對象}」 – Pedro

+0

你將永遠不會得到布爾,布爾可在功能將承諾後,被稱爲分配。無極是異步的,必須uderstand異步函數線,他們在代碼不調用,它運行後,在同一範圍內的一些時間。檢查我的代碼並嘗試。 –

1

UserService.isAccount似乎返回一個承諾,所以你必須使用這種方式:

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

所以,當它的可用的結果分配。