Sha256: 95227fafafd05f8d3dd8b5c83fb31e2837eba0c4eab431e5da308573ccc1766e
Contents?: true
Size: 1.16 KB
Versions: 1
Compression:
Stored size: 1.16 KB
Contents
# encoding: utf-8 class Promise class Callback def initialize(on_fulfill, on_reject, next_promise) @on_fulfill, @on_reject = on_fulfill, on_reject @next_promise = next_promise end def block_for(promise) promise.fulfilled? ? @on_fulfill : @on_reject end def param_for(promise) promise.fulfilled? ? promise.value : promise.reason end def dispatch(promise) if (block = block_for(promise)) handle_result(promise) { execute(promise, block) } else assume_state(promise, @next_promise) end end def execute(promise, block) block.call(param_for(promise)) rescue => ex @next_promise.reject(ex, promise.backtrace) raise end def handle_result(promise) 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.6.0 | lib/promise/callback.rb |