如何避免用$q嵌套承诺
How to avoid nesting promises with $q
我试图更多地进入承诺,而不是异步。我有:
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);
});
我想我通过分离then
和catch
来正确findRepositoryPromise
部分.但我仍然嵌套了getUserTeamsPromise
。这似乎有些不对劲。有什么想法吗?
警告
- 我更熟悉"promise"npm 模块中的 Promise 实现,但如果 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);
});
因为 promise 将接管其 then 回调的返回值的状态 - 如果这是一个 promise,则可以如上所示将其链接。这也意味着,如果return $scope.getTeamRepositories($scope.selectedTeamId);
也返回一个承诺,则可以在另一个链式.then
调用中检索其结果。
相关文章:
- 嵌套承诺会产生类似的效果
- 如何展平嵌套承诺依赖项
- 嵌套承诺
- 转换嵌套'对于'循环成一个承诺,为了一个承诺?嵌套承诺
- 嵌套承诺与q-io
- 如何将嵌套承诺与Q连锁?我可以'Don’我不能让它们按正确的顺序运行
- 在嵌套承诺链中重新引发异常
- 此代码中嵌套承诺的目的是什么
- 嵌套承诺执行不同步
- AngularJs $q.all 不会用混合的嵌套承诺来解决
- 使用模拟工厂在茉莉花中测试嵌套承诺
- angular.foreach 解析嵌套承诺
- 如何避免用$q嵌套承诺
- 如何返回嵌套承诺的结果
- Keystone.js嵌套承诺 -> foreach -> 列表查找范围问题
- 在 node.js 中返回延迟嵌套承诺
- 在 javascript 中进行嵌套承诺调用
- 嵌套承诺被卡住
- 简化嵌套承诺和循环
- 优化嵌套承诺