【发布时间】:2015-08-15 10:18:39
【问题描述】:
我在 Ember 控制器中构建了一个复杂的对象图。
export default Container({
username: DS.attr('string'),
items: DS.hasMany('item')
})
export default SomeDetail({
foo: DS.attr('string')
})
export default Item({
detail_type: DS.attr('string'),
detail_id: DS.attr('number'),
container: DS.belongsTo('container')
})
所以,要设置这一切,我基本上是在尝试
- 创建容器,
- 然后,创建细节,其中可能有很多
- 然后,创建项目,其中将包含尽可能多的细节
- 等待所有承诺解决
- 一旦容器拥有所有东西,就会触发自定义休息操作以“激活”容器。
代码看起来像这样(咖啡),简化但我认为要点在那里
promises = []
store = @store
items = @get('itemsInMyController')
store.createRecord('container',
username: @get('username')
).save().then(container) ->
items.forEach (item) ->
store.createRecord('detail',
# Set Properties
).save().then (detail) ->
item = store.createRecord('item',
# Set Properties
)
promsies.push item
item.save()
Ember.RSVP.allSettled(promsies).then (responses) ->
# Perform Activate Action
当所有的承诺都解决了,一切都是我想要的,然而,allSettled 太快了,因为在细节解决之前就已经达到了,所以项目还没有创建,所以数组中没有任何内容。如果我将详细信息添加到数组中也会发生这种情况,因为它仍然在创建项目之前就已经达到了。
我唯一能做的就是让单独的数组跟踪不同的承诺,并在每个解决方案时都有一个嵌套的 allSettled ,但这开始感觉很麻烦,我想知道是否有更好的方法。
谢谢!
【问题讨论】:
-
对coffee脚本不是很熟悉,但是allSettled语句是在容器创建的promise里面还是外面? Nvm 查看@Bergi 的回答
标签: ember.js coffeescript promise