Sha256: f67146301e8a7195e66f1875a30f7d18308a647f1cdd3c5700e221a3b6aa3230
Contents?: true
Size: 1.09 KB
Versions: 1
Compression:
Stored size: 1.09 KB
Contents
# encoding: utf-8 class Promise class Callback def initialize(promise, on_fulfill, on_reject, next_promise) @promise = promise @on_fulfill = on_fulfill @on_reject = on_reject @next_promise = next_promise end def block @promise.fulfilled? ? @on_fulfill : @on_reject end def param @promise.fulfilled? ? @promise.value : @promise.reason end def dispatch if block handle_result { execute } else assume_state(@promise, @next_promise) end end def execute block.call(param) rescue => ex @next_promise.reject(ex, @promise.backtrace) raise end def handle_result if Promise === (result = yield) assume_state(result, @next_promise) else @next_promise.fulfill(result, @promise.backtrace) end end def assume_state(source, target) on_fulfill = proc { target.fulfill(source.value, source.backtrace) } on_reject = proc { target.reject(source.reason, source.backtrace) } source.then(on_fulfill, on_reject) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
promise.rb-0.7.0.rc1 | lib/promise/callback.rb |