Ember:解决复杂的异步承诺
Ember: Resolve complex async promises
>我有一个用例,其中 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;
});
注意:不确定您在解决会话时要做什么,并且不对练习执行任何操作
相关文章:
- 为什么同步睡眠功能没有被承诺内异步化
- 如何按照承诺使用mocha/chai/chai测试ES7异步函数
- Node JS异步承诺.所有问题
- 将异步工作流更改为承诺(蓝鸟)
- JQuery 承诺异步对话
- WinJS,从可能是异步的函数返回一个承诺,也可能不是异步的
- 同步异步创建的承诺
- 当我在异步操作Redux上开始单元测试时,没有定义错误承诺
- 使我的异步代码与setTimeout同步.我需要承诺吗
- 异步角度承诺和变量初始化
- 如何在节点中使用承诺一次并行异步多个请求
- 使用链式 Q 承诺异步加载的局部变量
- JavaScript 异步编程:承诺与生成器
- Ember:解决复杂的异步承诺
- 异步承诺中未处理的承诺拒绝
- ES6异步承诺
- 非异步承诺回调
- 使用Bluebird进行异步承诺处理
- 异步承诺失败时首选throw或reject
- Angular: Switch语句中的异步承诺