[英]Execute Code only after Multiple Promises Fulfilled in EmberJS
我有一个EmberJS ArrayController。 我想在这个控制器上有一个计算属性, neurons
,它是model
属性的一个子集。 子集是基于侧栏中的切换按钮计算的,该切换按钮绑定到currentDataset
。 另一个计算属性, activePlots
则依赖于neurons
; 该Neuron
模型具有hasMany
关系Plot
,并activePlots
加载所有的情节对象在每个神经元的对象关联neurons
。
目前我正在尝试使用mapBy
,但我mapBy
了一个问题。 每次检索Neuron
对象的plots
返回PromiseArray
。 我需要立即操纵所有返回的图。 我明白我可以打电话then
对单个呼叫的承诺结果get('plots')
但我怎么只有后执行代码get('plots')
调用返回的所有神经元?
neurons: ( ->
@get('model').filterBy('dataset', @get('currentDataset'))
).property('model', 'currentDataset'),
activePlots: ( ->
plots = @get('neurons').mapBy('plots')
# ...code to execute after all plots have loaded
).property('neurons')
更新:从控制台输出图片console.log(plotSets)
内then
回调
Ember.RSVP.all(@get('neurons').mapBy('plots')).then (plotSets) ->
console.log(plotSets)
有一种方便的方法来组合promises: Ember.RSVP.all(ary)
接受一个promises数组,并成为一个promise,当输入数组中的所有promise都被解析时,它将被解析。 如果拒绝一个,则拒绝all()
保证。
这非常方便,例如,当启动多个并行网络请求时,并在完成所有这些请求时继续。
除了Steve说你可以观看nuerons.length并使用Ember.scheduleOnce来安排更新(下面猜到了coffeescript)
activePlots: [],
watchNuerons: ( ->
Ember.run.scheduleOnce('afterRender', this, @updatePlots);
).observes('nueron.length'),
updatePlots: ( ->
plots = @get('neurons').mapBy('plots')
# ...code to execute after all plots have loaded
@set('activePlots', plots)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.