Class: BubbleWrap::Reactor::DependentDeferrable
- Inherits:
-
DefaultDeferrable
- Object
- DefaultDeferrable
- BubbleWrap::Reactor::DependentDeferrable
- Defined in:
- motion/reactor/dependent_deferrable.rb
Class Method Summary collapse
-
.on(*args) ⇒ Object
args are Deferrable(s) which the returned Deferrable depends on.
Methods included from Deferrable
#callback, #callback_delegate, #cancel_timeout, #deferred_args, #deferred_status, #delegate, #errback, #errback_delegate, #execute_block, #fail, #set_deferred_status, #succeed, #timeout
Class Method Details
.on(*args) ⇒ Object
args are Deferrable(s) which the returned Deferrable depends on. returns a Deferrable that depends on args. which:
succeeds only when every Deferrable in args succeeds
fails immediately when any Deferrable in args fails
Have to be careful that #deferred_args for DependentDeferrable is a list of #deferred_args from its children Deferrable(s).
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'motion/reactor/dependent_deferrable.rb', line 10 def self.on(*args) deferrable = self.new @children_deferrables = args @children_deferrables.each do |e| e.callback do |result| if @children_deferrables.all? {|a| a.deferred_status == :succeeded} deferrable.succeed(*@children_deferrables.map(&:deferred_args)) end end e.errback do |result| deferrable.fail(*e.deferred_args) end end deferrable end |