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()。