【问题标题】:Promise chain with each承诺链与每个
【发布时间】:2014-02-24 17:45:51
【问题描述】:

我有这个代码:

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 深,因此不需要递归。

我们将不胜感激!

【问题讨论】:

    标签: javascript angularjs promise q


    【解决方案1】:

    是的,你会使用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()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2015-07-08
    • 2015-09-05
    • 1970-01-01
    • 2013-11-25
    • 2020-12-05
    • 2015-10-23
    相关资源
    最近更新 更多