我有一个AngularJS承诺(users
)依赖于另一个承诺(userTypes
)在我操作它之前就已经完成了。两个promises的结果都在控制器中使用,因此,我认为这意味着我需要将promise中的实际数据分配给$scope
变量:
// this is all in my controller somewhere
userService.getUserTypes().then(function( data ) {
$scope.userTypes = data;
}).then(function( data ) {
userService.getUsers().then(function( data ) {
$scope.users = data;
for( var user in $scope.users ) {
$scope.users[ user ].userType = $filter("filter")( $scope.userTypes, { id: $scope.users[ user ].userTypeID })[0];
}
});
});
来自userService
的示例结果:
// userService.getUserTypes()
[
{
"id": 1,
"type": "Administrator"
},
{
"id": 2,
"type": "User"
}
]
// userService.getUsers()
[
{
"id": 1,
"name": "Sean Walsh",
"userTypeID": 2
},
{
"id": 2,
"name": "Joe Blow",
"userTypeID": 2
},
{
"id": 3,
"name": "Joe Administrator",
"userTypeID": 1
}
]
这是一个人为的例子(很可能是语法错误),但我相信它能准确地显示我想要完成的事情:我想确保我的Angular模型准确地表示来自服务器的对象图,所以我是将实际的userType
对象分配给user
,而不是仅仅使用ID表示类型。
我对这种方法的关注是,从嵌套的then()
调用开始,我已经可以看到一些“回调地狱”。有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
从其他承诺体系结构推断,您很可能会从then
返回承诺,然后该承诺将成为下一个.then
应用的对象。
// this is all in my controller somewhere
userService.getUserTypes().then(function( data ) {
$scope.userTypes = data;
}).then(function(data) {
return userService.getUsers();
}).then(function( data ) {
$scope.users = data;
for( var user in $scope.users ) {
$scope.users[ user ].userType = $filter("filter")( $scope.userTypes, { id: $scope.users[ user ].userTypeID })[0];
}
});;