Class: BubbleWrap::Reactor::DependentDeferrable

Inherits:
DefaultDeferrable show all
Defined in:
motion/reactor/dependent_deferrable.rb

Class Method Summary collapse

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