Module: When

Defined in:
lib/dolt/async/when.rb

Defined Under Namespace

Classes: Deferred, Promise, Resolver

Class Method Summary collapse

Class Method Details

.all(promises) ⇒ Object

Raises:

  • (ArgumentError)


94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/dolt/async/when.rb', line 94

def self.all(promises)
  raise(ArgumentError, "expected enumerable promises") if !promises.is_a?(Enumerable)
  resolved = 0
  results = []
  d = Deferred.new

  attempt_resolution = lambda do |err, res|
    break if d.resolved?
    if err.nil?
      d.resolve(res) if promises.length == resolved
    else
      d.reject(err)
    end
  end

  wait_for_all(promises) do |err, result, index|
    resolved += 1
    results[index] = result
    attempt_resolution.call(err, results)
  end

  attempt_resolution.call(nil, results) if promises.length == 0
  d.promise
end

.deferred(val) ⇒ Object



89
90
91
92
# File 'lib/dolt/async/when.rb', line 89

def self.deferred(val)
  return val if val.respond_to?(:callback) && val.respond_to?(:errback)
  Deferred.resolved(val).promise
end