2016-07-18 2 views
0

Im комбинирование 2 обещаний, но не работает, в службе у меня есть 2 метода, где метод «UserService.getAuthenticatedUser()» получает текущую информацию пользователя, а не «UserService.getAccountTypeData (idUser) ", где получает информацию о типе пользователя, но чтобы перейти ко второму методу, мне нужен идентификатор пользователя, поэтому сначала я вызываю« UserService.getAuthenticatedUser() », получаю идентификатор, а не вызываю« UserService.getAccountTypeData (idUser) », , но не работает.Сочетание двух обещаний в angularjs

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

Спасибо Steam, только один вопрос, правильно ли это вложение? 'Code' UserService.getAuthenticatedUser() .then (функция (ответ) { вар UserDetails = response.data; UserService.getAccountTypeData (idUser) \t \t .then (функция (ответ) { \t \t вар 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()' обещание, и вам также нужно вернуться в 'isAccount()' так же, как это сделано в другом ответе – charlietfl

Смежные вопросы