我有一個複雜的對象圖,我正在建立一個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')
})
因此,要設置這一切了,我只想盡力去
- 創建conatainer,
- 然後,創建的細節,其中可能有很多
- 然後,創建項目,其中將有儘可能多的細節
- 等待所有承諾解決
- 將自定義休息動作觸發爲「激活」容器一旦擁有所有的東西。
的代碼看起來像這樣(咖啡),簡化的,但我認爲要點有
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,但是這開始感覺非常毛茸茸,我想知道是否有更好的方法。
謝謝!
沒有真正熟悉咖啡的腳本,但內部或外部容器創建的諾言allSettled聲明? Nvm從@Bergi看到答案 – jcbvm