Sha256: 6074d74011ef7641c42acf26c612c65af6134e73c1974b5438a3ed015c5e64b8

Contents?: true

Size: 1.18 KB

Versions: 20

Compression:

Stored size: 1.18 KB

Contents

# A temp patch for promises until https://github.com/opal/opal/pull/725 is released.
class Promise
  def initialize(success = nil, failure = nil)
    @success = success
    @failure = failure

    @realized  = nil
    @exception = false
    @value     = nil
    @error     = nil
    @delayed   = false

    @prev = nil
    @next = nil
  end


  def >>(promise)
    @next = promise

    if exception?
      promise.reject(@delayed[0])
    elsif resolved?
      promise.resolve(@delayed ? @delayed[0] : value)
    elsif rejected? && (!@failure || Promise === (@delayed ? @delayed[0] : @error))
      promise.reject(@delayed ? @delayed[0] : error)
    end

    self
  end

  def resolve!(value)
    if @next
      @next.resolve(value)
    else
      @delayed = [value]
    end
  end

  def reject!(value)
    if @next
      @next.reject(value)
    else
      @delayed = [value]
    end
  end

  # Waits for the promise to resolve (assuming it is blocking on
  # the server) and returns the result.
  def sync
    result = nil
    error = nil

    self.then do |val|
      result = val
    end.fail do |err|
      error = err
    end

    if error
      raise error
    else
      return result
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
volt-0.9.1 lib/volt/utils/promise_patch.rb
volt-0.9.1.pre5 lib/volt/utils/promise_patch.rb
volt-0.9.1.pre4 lib/volt/utils/promise_patch.rb
volt-0.9.1.pre3 lib/volt/utils/promise_patch.rb
volt-0.9.1.pre2 lib/volt/utils/promise_patch.rb
volt-0.9.1.pre1 lib/volt/utils/promise_patch.rb
volt-0.9.0 lib/volt/utils/promise_patch.rb
volt-0.9.0.pre7 lib/volt/utils/promise_patch.rb
volt-0.9.0.pre6 lib/volt/utils/promise_patch.rb
volt-0.9.0.pre5 lib/volt/utils/promise_patch.rb
volt-0.9.0.pre4 lib/volt/utils/promise_patch.rb
volt-0.9.0.pre3 lib/volt/utils/promise_patch.rb
volt-0.9.0.pre2 lib/volt/utils/promise_patch.rb
volt-0.9.0.pre1 lib/volt/utils/promise_patch.rb
volt-0.8.27.beta9 lib/volt/utils/promise_patch.rb
volt-0.8.27.beta8 lib/volt/utils/promise_patch.rb
volt-0.8.27.beta7 lib/volt/utils/promise_patch.rb
volt-0.8.27.beta6 lib/volt/utils/promise_patch.rb
volt-0.8.27.beta5 lib/volt/utils/promise_patch.rb
volt-0.8.27.beta4 lib/volt/utils/promise_patch.rb