2016-07-18 26 views
0

我結合了2個承諾,但沒有工作,在一個服務中,我有2個方法,其中方法「UserService.getAuthenticatedUser()」獲取當前用戶信息,並且比「UserService.getAccountTypeData(idUser )「,其中獲取usertype信息,但要獲得第二個方法我需要userID,所以基本上我首先調用」UserService.getAuthenticatedUser()「,獲取id,並調用」UserService.getAccountTypeData(idUser)「 ,但沒有工作。在angularjs中結合2個承諾

function isAccount(accountName) { 
      UserService.getAuthenticatedUser() 
       .then(function (response) { 
        var userDetails = response.data; 

       }); 


      UserService.getAccountTypeData(idUser) 
       .then(function (response) { 
        var userDetails = response.data; 
        return userDetails; 
       }); 

} 

PS:我已經注射服務...

回答

2

你可以連續使用你的承諾從你.then()函數返回值。

function isAccount(accountName) { 
    return UserService.getAuthenticatedUser(accountName) // pass in accountName argument? 
     .then(function(response) { 
      var userDetails = response.data; 
      return userDetails.Id; // user id value 
     }) 
     .then(UserService.getAccountTypeData) // userDetails.Id gets passed to getAccounttypeData method 
     .then(function(response) { 
      var userDetails = response.data; 
      return userDetails; 
     }); 

} 

// usage 
isAccount('AccountA').then(function(userDetails) { 
    // do something with userDetails 
}); 
+0

感謝蒸汽,只是一個問題,它是這樣正確的嵌套? 'code' UserService.getAuthenticatedUser() 。然後(功能(響應){ VAR爲userDetails = response.data; UserService.getAccountTypeData(ID用戶所) \t \t。然後(功能(響應){ \t \t VAR爲userDetails = response.data; \t \t回報爲userDetails; \t \t}); });'code' –

+0

@MarcoPereira嵌套也能發揮作用,只要確保你引用定義的變量。在您的評論示例中,「idUser」不存在。我假設這將來自你的第一個'userDetails'實例。 – SteamDev

+0

@MarcoPereira你還沒有定義'idUser',但除此之外基本上是一樣的 – charlietfl

0

你處理異步調用,所以當你調用.then()方法,它的執行功能和佈線了回調作爲參數傳遞then()匿名函數。如果第二個是依賴於第一個,你可以像這樣嵌套...

function isAccount(accountName) { 
     UserService.getAuthenticatedUser() 
     .then(function (response) { 
      var userDetails = response.data; 
      UserService.getAccountTypeData(idUser) 
       .then(function (response) { 
        var userDetails = response.data; 
        return userDetails; 
       }); 
     }); 
} 
+0

在第一個'then()中缺少返回值' – charlietfl

+0

你知道......我在考慮返回,並且這些調用是異步執行的,不要以爲他可以像他試圖在這裏一樣迴歸它。我認爲回報是無用的。 – Zach

+0

當然你可以,你需要返回'UserService.getAccountTypeData()'promise,並且你還需要返回'isAccount()',這與其他回答 – charlietfl