EmberJS实现多个嵌套承诺

时间:2014-06-08 09:22:54

标签: ember.js

我想返回一个对象数组。我的代码如下所示:

var apps = [];

    this.get('groups').then(function(groups)
    {
        groups.forEach(function(group)
        {
            self.store.find('module', group.get('module').get('id')).then(function(module)
            {
                self.store.find('app', module.get('app').get('id')).then(function(app)
                {
                    if(!apps.contains(app))
                        apps.pushObject(app);
                });
            });
        });
    });

我希望在foreach-loop完成后返回所有应用,但我不知道。

1 个答案:

答案 0 :(得分:2)

你必须始终回复承诺继续建立链条。

var self = this;

return this.get('groups')
    // Return an app for each group
    .then(function (groups) {
        return Ember.RSVP.Promise.all(groups.map(function (group) {
            return self.store.find('module', group.get('module.id'))
                .then(function (module) {
                    return self.store.find('app', module.get('app.id'));
                });
        }));
    })
    // Filter out duplicates
    .then(function (apps) {
        return apps.uniq();
    });