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