2013-02-04 61 views
1

我有一些Deferrables,我需要在回調完成時做一些回調。EventMachine延遲迴調鏈

defers[0].callback do 
    defers[1].callback do 
     defers[2].callback do 
      yield if block_given? 
     end 
    end 
end 

但這是非常醜陋的,我必須知道必要的回調的確切數量。 我怎樣才能以更簡潔的方式來書寫它?

像在jQuery中,$.when允許傳遞一個數組的$.Deferred對象,這將是可怕的,我可以在Ruby中做到這一點?

$.when(defers).done(function() { 
    // do something 
}) 

因爲使用不兼容的庫,我不能使用em-synchrony。


解決方案:

multi = EventMachine::MultiRequest.new 
defers.each.with_index do |defer, i| 
    multi.add(i, defer) 
end 
multi.callback do 
    yield if block_given? 
end 

回答