class Object

Public Instance Methods

deferred() click to toggle source

Creates Future object for JSON-RPC Server response @return [Future]

# File lib/bellite.rb, line 659
def deferred()
    cb = []
    answer = false

    future = false
    reject = false

    _then = lambda do |*args|
        success = args[0] || false
        failure = args[1] || false
        cb << [success,failure]
        if answer
            answer.call
        end
        return future.promise
    end

    resolve = lambda do |result|
        while cb.size > 0
            success, failure = cb.shift()
            begin
                if success != false
                    change, res = success.call(result)
                    if change and res===nil
                        result = res
                    end
                end
            rescue Exception => err
                if failure != false
                    res = failure.call(err)
                elsif cb.size = 0
                    #excepthook
                end
                return reject.call(res==nil ? err : res)
            end
        end
        answer = lambda { resolve.call(result) }
    end

    reject = lambda do |error|
        while cb.size > 0
            failure = cb.shift()[1]
            begin
                if failure != false
                    change, res = failure.call(error)
                    if change and res===nil
                        error = res
                    end
                end
            rescue Exception => err
                res = err
                if cb.size == 0
                    #excepthook
                end
            end
        end
        answer = lambda { reject.call(error) }
    end

    future = Future.new _then, resolve, reject
    return future
end