Class: Twterm::Promise
- Inherits:
-
Object
- Object
- Twterm::Promise
- Defined in:
- lib/twterm/promise.rb
Defined Under Namespace
Classes: Callback
Class Method Summary collapse
Instance Method Summary collapse
- #catch(on_rejected = nil, &block) ⇒ Object
-
#initialize ⇒ Promise
constructor
A new instance of Promise.
- #reject(reason) ⇒ Object
- #resolve(value) ⇒ Object
- #then(on_fulfilled = nil, on_rejected = nil, &block) ⇒ Object
Constructor Details
#initialize ⇒ Promise
Returns a new instance of Promise.
3 4 5 6 7 8 9 10 |
# File 'lib/twterm/promise.rb', line 3 def initialize @state = :pending @callbacks = [] Thread.new do yield method(:resolve), method(:reject) end if block_given? end |
Class Method Details
Instance Method Details
#catch(on_rejected = nil, &block) ⇒ Object
12 13 14 15 16 17 18 19 |
# File 'lib/twterm/promise.rb', line 12 def catch(on_rejected = nil, &block) if on_rejected.is_a?(Proc) && block_given? fail SyntaxError, 'both block arg and actual block given' end on_rejected ||= block self.then(nil, on_rejected) end |
#reject(reason) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/twterm/promise.rb', line 21 def reject(reason) return if settled? @state = :rejected @reason = reason callbacks.each do |cb| cb.invoke_on_rejected(reason) end self end |
#resolve(value) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/twterm/promise.rb', line 37 def resolve(value) return if settled? @state = :fulfilled @value = value callbacks.each do |cb| cb.invoke_on_fulfilled(value) end self end |
#then(on_fulfilled = nil, on_rejected = nil, &block) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/twterm/promise.rb', line 49 def then(on_fulfilled = nil, on_rejected = nil, &block) if (on_fulfilled.is_a?(Proc) || on_rejected.is_a?(Proc)) && block_given? fail SyntaxError, 'both block arg and actual block given' end on_fulfilled ||= block next_promise = Promise.new callback = Callback.new( self, on_fulfilled.is_a?(Proc) ? on_fulfilled : nil, on_rejected.is_a?(Proc) ? on_rejected : nil, next_promise ) @callbacks << callback callback.invoke_on_fulfilled(@value) if fulfilled? callback.invoke_on_rejected(@reason) if rejected? next_promise end |