Sha256: f3f431661a5544cf6b9481ce4cf0fcc2566d94d523113e666eb8f8a8b10aa8ff
Contents?: true
Size: 1.35 KB
Versions: 1
Compression:
Stored size: 1.35 KB
Contents
# encoding: utf-8 require 'promise/version' require 'promise/callback' require 'promise/progress' class Promise include Promise::Progress attr_reader :state, :value, :reason, :backtrace def initialize @state = :pending @callbacks = [] end def pending? @state == :pending end def fulfilled? @state == :fulfilled end def rejected? @state == :rejected end def then(on_fulfill = nil, on_reject = nil, &block) on_fulfill ||= block next_promise = Promise.new add_callback { Callback.new(on_fulfill, on_reject, next_promise) } next_promise end def add_callback(&generator) if pending? @callbacks << generator else dispatch!(generator.call) end end def sync wait if pending? raise reason if rejected? value end def fulfill(value = nil, backtrace = nil) dispatch(backtrace) do @state = :fulfilled @value = value end end def reject(reason = RuntimeError, backtrace = nil) dispatch(backtrace) do @state = :rejected @reason = reason end end def dispatch(backtrace) if pending? yield @backtrace = backtrace || caller @callbacks.each { |generator| dispatch!(generator.call) } nil end end def dispatch!(callback) defer { callback.dispatch(self) } end def defer yield end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
promise.rb-0.6.0 | lib/promise.rb |