1

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

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
4

1 回答 1

3

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

如果没有,实现很容易em-http-request / lib / em-http / multi.rb,所以自己做。

于 2013-02-08T23:38:42.003 回答