class BubbleWrap::Reactor::DependentDeferrable

Public Class Methods

on(*args) click to toggle source

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).

# 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