Javascript 如何避免使用$q嵌套承诺
我试图更多地使用承诺,而较少使用异步。我有:Javascript 如何避免使用$q嵌套承诺,javascript,q,angular-promise,Javascript,Q,Angular Promise,我试图更多地使用承诺,而较少使用异步。我有: var findRepositoryPromise, getUserTeamsPromise; getUserTeamsPromise = null; findRepositoryPromise = RepositoryService.find($stateParams.host, $stateParams.owner, $stateParams.repository); findRepositoryPromise.then(function(
var findRepositoryPromise, getUserTeamsPromise;
getUserTeamsPromise = null;
findRepositoryPromise = RepositoryService.find($stateParams.host, $stateParams.owner, $stateParams.repository);
findRepositoryPromise.then(function(response) {
$scope.selectedRepository = response.repository;
getUserTeamsPromise = TeamService.getUserTeams($rootScope.user.id);
return getUserTeamsPromise.then(function(response) {
$scope.teams = response.teams;
$scope.selectedTeam = $scope.teams[0];
$scope.selectedTeamId = $scope.selectedTeam.id;
return $scope.getTeamRepositories($scope.selectedTeamId);
});
});
findRepositoryPromise.catch(function(error) {
return toaster.pop('error', 'Error', error);
});
我想我通过分离
然后
和捕获
的方法,将查找位置承诺
部分正确地写了下来。但是我仍然嵌套了getUserTeamsPromise
。这似乎有点错误。有什么想法吗?警告-我更熟悉“承诺”npm模块中的承诺实现,但如果q以同样的方式工作,您可以这样做:
var findRepositoryPromise;
findRepositoryPromise = RepositoryService.find($stateParams.host, $stateParams.owner, $stateParams.repository);
findRepositoryPromise.then(function(response) {
$scope.selectedRepository = response.repository;
return TeamService.getUserTeams($rootScope.user.id);
}).then(function(response) {
$scope.teams = response.teams;
$scope.selectedTeam = $scope.teams[0];
$scope.selectedTeamId = $scope.selectedTeam.id;
return $scope.getTeamRepositories($scope.selectedTeamId);
});
findRepositoryPromise.catch(function(error) {
return toaster.pop('error', 'Error', error);
});
因为承诺将接管其随后回调的返回值的状态——如果这是一个承诺,它可以如上所示进行链接。这也意味着if返回$scope.getTeamRepositories($scope.selectedTeamId)
也返回一个承诺,其结果可以在另一个链接的中检索。然后
调用