123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::Promise

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
ActiveRecord::Promise::Complete
Inherits: BasicObject
Defined in: activerecord/lib/active_record/promise.rb

Instance Attribute Summary

Instance Method Summary

  • #then(&block)

    Returns a new Promise that will apply the passed block when the value is accessed:

  • #value

    Returns the query result.

Instance Attribute Details

#pending?Boolean (readonly)

Returns whether the associated query is still being executed or not.

[ GitHub ]

  
# File 'activerecord/lib/active_record/promise.rb', line 13

def pending?
  @future_result.pending?
end

Instance Method Details

#then(&block)

Returns a new Promise that will apply the passed block when the value is accessed:

Post.async_pick(:title).then { |title| title.upcase }.value
# => "POST TITLE"
[ GitHub ]

  
# File 'activerecord/lib/active_record/promise.rb', line 36

def then(&block)
  Promise.new(@future_result, @block ? @block >> block : block)
end

#value

Returns the query result. If the query wasn’t completed yet, accessing #value will block until the query completes. If the query failed, #value will raise the corresponding error.

[ GitHub ]

  
# File 'activerecord/lib/active_record/promise.rb', line 20

def value
  return @value if defined? @value

  result = @future_result.result
  @value = if @block
    @block.call(result)
  else
    result
  end
end