Javascript 每个人都有承诺链
我有以下代码:Javascript 每个人都有承诺链,javascript,angularjs,promise,q,Javascript,Angularjs,Promise,Q,我有以下代码: GamesStatsService.query({ level: 1 }).$promise.then(function(consoles) { $scope.consoles = consoles; _.each(consoles, function(c) { GamesStatsService.query({ consoleName: c.id, level: 2 }).$promise.then(function(re
GamesStatsService.query({ level: 1 }).$promise.then(function(consoles) {
$scope.consoles = consoles;
_.each(consoles, function(c) {
GamesStatsService.query({ consoleName: c.id, level: 2 }).$promise.then(function(regions) {
c.regions = regions;
_.each(regions, function(r) {
GamesStatsService.query({ consoleName: c.id, regionName: r.id, level: 3 }).$promise.then(function(subRegions) {
r.subRegions = subRegions;
console.log('(maybe) finished loading, notify subscriber!');
});
});
});
});
});
现在我想知道什么时候所有问题都解决了,我猜我应该使用$q.all()来解决这个问题。问题是调用依赖于前面的步骤输出,因为我正在对前面的每个输出进行调用,所以承诺应该放在哪里
级别始终为3深,因此不需要递归
任何形式的输入将不胜感激 是的,您可以使用all()
但是您仍然需要嵌套它们:
GamesStatsService.query({ level: 1 }).$promise.then(function(consoles) {
$scope.consoles = consoles;
return $q.all(_.map(consoles, function(c) {
return GamesStatsService.query({ consoleName: c.id, level: 2 }).$promise.then(function(regions) {
c.regions = regions;
return $q.all(_.map(regions, function(r) {
return GamesStatsService.query({ consoleName: c.id, regionName: r.id, level: 3 }).$promise.then(function(subRegions) {
r.subRegions = subRegions;
return subRegions;
});
})).then(function(allSubRegions) {
return regions;
});
});
})).then(function(allRegions) {
return consoles;
});
}).then(function(consoles) {
console.log('finished loading of all regions and subregions for', consoles);
});
非常感谢!从未想过使用map()。