EventMachine Deferrable回调链

时间:2013-02-04 23:36:59

标签: ruby eventmachine

我有一些Deferrables,当所有这些都完成后我需要在回调中做一些事情。

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

1 个答案:

答案 0 :(得分:3)

如果您使用的是em-http-request gem,则可以使用EventMachine::MultiRequest

如果没有,实施很简单em-http-request / lib / em-http / multi.rb,请自行制作。