class Concurrent::Edge::ZipFuturesPromise

@!visibility private

Public Class Methods

new(blocked_by_futures, default_executor) click to toggle source
Calls superclass method Concurrent::Edge::BlockedPromise.new
# File lib/concurrent/edge/future.rb, line 1290
def initialize(blocked_by_futures, default_executor)
  super(Future.new(self, default_executor), blocked_by_futures, blocked_by_futures.size)

  on_completable nil if blocked_by_futures.empty?
end

Private Instance Methods

on_completable(done_future) click to toggle source
# File lib/concurrent/edge/future.rb, line 1296
def on_completable(done_future)
  all_success = true
  values      = Array.new(blocked_by.size)
  reasons     = Array.new(blocked_by.size)

  blocked_by.each_with_index do |future, i|
    if future.is_a?(Future)
      success, values[i], reasons[i] = future.result
      all_success                    &&= success
    else
      values[i] = reasons[i] = nil
    end
  end

  if all_success
    complete_with Future::SuccessArray.new(values)
  else
    complete_with Future::PartiallyFailed.new(values, reasons)
  end
end