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)
也返回一个承诺,其结果可以在另一个链接的
中检索。然后
调用