Ember:解决复杂的异步承诺

Ember: Resolve complex async promises

本文关键字:异步 承诺 复杂 解决 Ember      更新时间:2023-09-26

>我有一个用例,其中 Ember 数据中的所有模型关系都是异步加载的。我有一条路线,根据 parent.child 是否与特定模型匹配,在下面的示例中呈现祖父母。

到目前为止,我已经能够设法解决祖父和父模型异步加载的问题,但随后我的代码变得一团糟。

有没有有用的策略可以过滤掉祖父母,而不必处理各个层面的承诺?

示例模型定义

App.Grandparent = DS.Model.extend({
    ...
    parents: DS.hasMany('Parent', { async: true })
});
App.Parent = DS.Model.extend({
    ...
    grandParent: DS.belongsTo('Grandparent', { async: true }),
    child: DS.belongsTo('Child', { async: true })
});
App.Child = DS.Model.extend({
    ...
});

代码示例

    var client = this.modelFor('workspace.client');

    var promise = new Ember.RSVP.Promise(function(resolve)
    {
        client.get('sessions').then(function(sessions)
        {
            Ember.RSVP.all(sessions.getEach('exercises')).then(function(exercises)
            {
                Ember.RSVP.all(exercises.getEach('exercise')).then(function()
                {
                    console.log("RESOLVED");
                    resolve(sessions);
                });

            });

        });
    });

我认为你可以通过链接承诺来简单地逃脱。

var client = this.modelFor('workspace.client');
return client.get('sessions').then(function(sessions) {
  return Ember.RSVP.all(sessions.getEach('exercises'));
}).then(function(exercises) {
  return Ember.RSVP.all(exercises.getEach('exercise'));
}).then(function(allExercises) {
  console.log("RESOLVED");
  return allExercises;
});

注意:不确定您在解决会话时要做什么,并且不对练习执行任何操作