Javascript 在angularjs中组合2个承诺
我结合了2个承诺,但不起作用,在一个服务中,我有2个方法,其中方法“UserService.getAuthenticatedUser()”获取当前用户信息,而“UserService.getAccountTypeData(idUser)”获取用户类型信息,但要获取第二个方法,我需要用户ID,所以基本上首先调用“UserService.getAuthenticatedUser()”,获取id,然后调用“UserService.getAccountTypeData(idUser)”,但不起作用Javascript 在angularjs中组合2个承诺,javascript,angularjs,Javascript,Angularjs,我结合了2个承诺,但不起作用,在一个服务中,我有2个方法,其中方法“UserService.getAuthenticatedUser()”获取当前用户信息,而“UserService.getAccountTypeData(idUser)”获取用户类型信息,但要获取第二个方法,我需要用户ID,所以基本上首先调用“UserService.getAuthenticatedUser()”,获取id,然后调用“UserService.getAccountTypeData(idUser)”,但不起作用 f
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:我已经注入了服务…您可以通过从
函数返回值来链接您的承诺
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
});
您可以通过从.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
});
您处理的是异步调用,因此当您调用.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;
});
});
}
您处理的是异步调用,因此当您调用.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;
});
});
}
谢谢Steam,只有一个问题,这样的嵌套正确吗?code
UserService.getAuthenticatedUser().then(函数(响应){var userDetails=response.data;UserService.getAccountTypeData(idUser)。then(函数(响应){var userDetails=response.data;return userDetails;});})code
@MarcoPereira嵌套也可以,只要确保您引用的是已定义的变量。在您的注释示例中,idUser
不存在。我假设它来自您的第一个userDetails
实例。@MarcoPereira您没有定义idUser
,否则基本上就是sameThanks Steam,只有一个问题,这样的嵌套是否正确?code
UserService.getAuthenticatedUser().then(函数(响应){var userDetails=response.data;UserService.getAccountTypeData(idUser)。then(函数(响应){var userDetails=response.data;return userDetails;});})code
@MarcoPereira嵌套也可以,只需确保您引用的是定义的变量。在您的注释示例中,idUser
不存在。我假设这将来自您的第一个userDetails
实例。@MarcoPereira您没有定义idUser
,但其他情况基本相同首先在then()
中缺少一个返回,你知道……我在考虑返回,由于这些调用是异步执行的,我认为他不能以他在这里尝试的方式返回它。我认为返回是无用的。当然可以,你需要返回UserService.getAccountTypeData()
promise,您还需要返回到isAccount()
与在其他应答中的方式相同,但一旦UserService.getAuthenticatedUser()。然后(…)
调用,它就已经退出isAccount(…)
,对吗?。当服务调用完成时,它将执行anon函数,但这是它自己的闭包。不……您正在创建一个承诺链。因此,isAccount()
将被称为isAccount()。然后(…
但您需要将承诺返回到下一个然后()
在第一个然后()中缺少返回
你知道……我在考虑返回,由于这些调用是异步执行的,我认为他不能按他在这里尝试的方式返回。我认为返回是无用的。当然可以,你需要返回UserService.getAccountTypeData()
promise,你还需要返回到isAccount()
与在其他应答中的方式相同,但一旦UserService.getAuthenticatedUser()。然后(…)
调用,它就已经退出isAccount(…)
,对吗?。当服务调用完成时,它将执行anon函数,但这是在它自己的闭包中。不……您正在创建承诺链。因此isAccount()
将被称为isAccount()。然后(…
但您需要将promise返回到下一个then()