com.twitter.util

Promise

class Promise[A] extends Future[A] with Responder[A]

A writeable com.twitter.util.Future that supports merging. Callbacks (responders) of Promises are scheduled with com.twitter.concurrent.Scheduler.

Implementation details

A Promise is in one of five states: Waiting, Interruptible, Interrupted, Done and Linked where Interruptible and Interrupted are variants of Waiting to deal with future interrupts. Promises are concurrency-safe, using lock-free operations throughout. Callback dispatch is scheduled with com.twitter.concurrent.Scheduler.

Waiters are stored as a com.twitter.util.Promise.K. Ks (mnemonic: continuation) specifies a depth. This is used to implement Promise chaining: a callback with depth d is invoked only after all callbacks with depth < d have already been invoked.

Promise.become merges two promises: they are declared equivalent. become merges the states of the two promises, and links one to the other. Thus promises support the analog to tail-call eliminination: no space leak is incurred from flatMap in the tail position since intermediate promises are merged into the root promise.

A number of optimizations are employed to conserve space: we pay particular heed to the JVM's object representation, in particular for OpenJDK (HotSpot) version 7 running on 64-bit architectures with compressed OOPS. See comments on com.twitter.util.Promise.State for details.

Linear Supertypes
Responder[A], Future[A], Awaitable[A], AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Promise
  2. Responder
  3. Future
  4. Awaitable
  5. AnyRef
  6. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new Promise(result: Try[A])

  2. new Promise(handleInterrupt: PartialFunction[Throwable, Unit])

  3. new Promise()

Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. def addEventListener(listener: FutureEventListener[_ >: A]): Future[A]

    Register a FutureEventListener to be invoked when the computation completes.

    Register a FutureEventListener to be invoked when the computation completes. This method is typically used by Java programs because it avoids the use of small Function objects.

    Compare this method to transformedBy. The difference is that addEventListener is used to perform a simple action when a computation completes, such as recording data in a log-file. It analogous to a void method in Java: it has side-effects and no return value. transformedBy, on the other hand, is used to transform values from one type to another, or to chain a series of asynchronous calls and return the result. It is analogous to methods in Java that have a return-type. Note that transformedBy and addEventListener are not mutually exclusive and may be profitably combined.

    Definition Classes
    Future
  7. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  8. def become(other: Future[A]): Unit

    Become the other promise.

    Become the other promise. become declares an equivalence relation: this and other are the same.

    By becoming other, its waitlists are now merged into this's, and this becomes canonical. The same is true of interrupt handlers: other's interrupt handler becomes active, but is stored canonically by this - further references are forwarded. Note that this must be unsatisfied at the time of the call, and not race with any other setters. become is a form of satisfying the promise.

    This has the combined effect of compressing the other into this, effectively providing a form of tail-call elimination when used in recursion constructs. transform (and thus any other combinator) use this to compress Futures, freeing them from space leaks when used with recursive constructions.

    Note: do not use become with cyclic graphs of futures: the behavior of racing a.become(b) with b.become(a) is undefined (where a and b may resolve as such transitively).

  9. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  10. final def compress(): Promise[A]

    Attributes
    protected
  11. final def continue(k: K[A]): Unit

    Attributes
    protected[com.twitter.util]
    Definition Classes
    PromiseResponder
    Annotations
    @tailrec()
  12. final def depth: Short

    Attributes
    protected
    Definition Classes
    PromiseResponder
  13. def ensure(f: ⇒ Unit): Future[A]

    Invoked regardless of whether the computation completed successfully or unsuccessfully.

    Invoked regardless of whether the computation completed successfully or unsuccessfully. Implemented in terms of respond so that subclasses control evaluation order. Returns a chained Future.

    Definition Classes
    Future
  14. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  15. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  16. def filter(p: (A) ⇒ Boolean): Future[A]

    Definition Classes
    Future
  17. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  18. def flatMap[B](f: (A) ⇒ Future[B]): Future[B]

    If this, the original future, succeeds, run f on the result.

    If this, the original future, succeeds, run f on the result.

    The returned result is a Future that is satisfied when the original future and the callback, f, are done. If the original future fails, this one will also fail, without executing f.

    Definition Classes
    Future
    See also

    map()

  19. def flatten[B](implicit ev: <:<[A, Future[B]]): Future[B]

    Converts a Future[Future[B]] into a Future[B]

    Converts a Future[Future[B]] into a Future[B]

    Definition Classes
    Future
  20. def foreach(k: (A) ⇒ Unit): Future[A]

    Invoke the callback only if the Future returns successfully.

    Invoke the callback only if the Future returns successfully. Useful for Scala for comprehensions. Use onSuccess instead of this method for more readable code.

    Definition Classes
    Future
  21. final def forwardInterruptsTo(other: Future[_]): Unit

    Forward interrupts to another future.

    Forward interrupts to another future.

    other

    the Future to which interrupts are forwarded.

    Annotations
    @tailrec()
  22. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  23. def handle[B >: A](rescueException: PartialFunction[Throwable, B]): Future[B]

    Definition Classes
    Future
  24. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  25. def isDefined: Boolean

    Is the result of the Future available yet?

    Is the result of the Future available yet?

    Definition Classes
    Future
  26. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  27. def isInterrupted: Option[Throwable]

    Returns this promise's interrupt if it is interrupted.

  28. def join[B](other: Future[B]): Future[(A, B)]

    Combines two Futures into one Future of the Tuple of the two results.

    Combines two Futures into one Future of the Tuple of the two results.

    Definition Classes
    Future
  29. final def link(target: Promise[A]): Unit

    Attributes
    protected
    Annotations
    @tailrec()
  30. def map[B](f: (A) ⇒ B): Future[B]

    If this, the original future, succeeds, run f on the result.

    If this, the original future, succeeds, run f on the result.

    The returned result is a Future that is satisfied when the original future and the callback, f, are done. If the original future fails, this one will also fail, without executing f.

    Definition Classes
    Future
    See also

    flatMap()

  31. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  32. final def notify(): Unit

    Definition Classes
    AnyRef
  33. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  34. def onFailure(rescueException: (Throwable) ⇒ Unit): Future[A]

    Invoke the function on the error, if the computation was unsuccessful.

    Invoke the function on the error, if the computation was unsuccessful. Returns a chained Future as in respond.

    returns

    chained Future

    Definition Classes
    Future
  35. def onSuccess(f: (A) ⇒ Unit): Future[A]

    Invoke the function on the result, if the computation was successful.

    Invoke the function on the result, if the computation was successful. Returns a chained Future as in respond.

    returns

    chained Future

    Definition Classes
    Future
  36. def or[U >: A](other: Future[U]): Future[U]

    A synonym for select(): Choose the first Future to succeed.

    A synonym for select(): Choose the first Future to succeed.

    Definition Classes
    Future
  37. final def parent: Promise[A]

    Attributes
    protected
    Definition Classes
    PromiseResponder
  38. def poll: Option[Try[A]]

    Polls for an available result.

    Polls for an available result. If the Future has been satisfied, returns Some(result), otherwise None.

    Definition Classes
    PromiseFuture
  39. def proxyTo[B >: A](other: Promise[B]): Unit

    Send updates from this Future to the other.

    Send updates from this Future to the other. other must not yet be satisfied.

    Definition Classes
    Future
  40. final def raise(intr: Throwable): Unit

    Raise the given throwable as an interrupt.

    Raise the given throwable as an interrupt. Interrupts are one-shot and latest-interrupt wins. That is, the last interrupt to have been raised is delivered exactly once to the Promise responsible for making progress on the future (multiple such promises may be involved in flatMap chains).

    Raising an interrupt does not alter the externally observable state of the Future. They are used to signal to the producer of the future's value that the result is no longer desired (for whatever reason given in the passed Throwable).

    Definition Classes
    PromiseFuture
    Annotations
    @tailrec()
  41. def ready(timeout: Duration)(implicit permit: CanAwait): Promise.this.type

    Support for Await.ready.

    Support for Await.ready. The use of the implicit permit is an access control mechanism: only Await.ready may call this method.

    Definition Classes
    PromiseAwaitable
    Annotations
    @throws( classOf[TimeoutException] ) @throws( classOf[InterruptedException] )
  42. def rescue[B >: A](rescueException: PartialFunction[Throwable, Future[B]]): Future[B]

    Definition Classes
    Future
  43. def respond(k: (Try[A]) ⇒ Unit): Future[A]

    Note: exceptions in responds are monitored.

    Note: exceptions in responds are monitored. That is, if the computation {{k}} throws a raw (ie. not encoded in a Future) exception, it is handled by the current monitor, see {{com.twitter.util.Monitor}} for details.

    returns

    a chained Future[A]

    Definition Classes
    ResponderFuture
  44. def result(timeout: Duration)(implicit permit: CanAwait): A

    Support for Await.result.

    Support for Await.result. The use of the implicit permit is an access control mechanism: only Await.result may call this method.

    Definition Classes
    PromiseAwaitable
    Annotations
    @throws( classOf[Exception] )
  45. def select[U >: A](other: Future[U]): Future[U]

    Choose the first Future to succeed.

    Choose the first Future to succeed.

    other

    another Future

    returns

    a new Future whose result is that of the first of this and other to return

    Definition Classes
    Future
  46. def setException(throwable: Throwable): Unit

    Populate the Promise with the given exception.

    Populate the Promise with the given exception.

    Exceptions thrown
    ImmutableResult

    if the Promise is already populated

  47. final def setInterruptHandler(f: PartialFunction[Throwable, Unit]): Unit

    (Re)sets the interrupt handler.

    (Re)sets the interrupt handler. There is only one active interrupt handler.

    f

    the new interrupt handler

    Annotations
    @tailrec()
  48. def setValue(result: A): Unit

    Populate the Promise with the given result.

    Populate the Promise with the given result.

    Exceptions thrown
    ImmutableResult

    if the Promise is already populated

  49. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  50. def toJavaFuture: java.util.concurrent.Future[_ <: A]

    Convert a Twitter Future to a Java native Future.

    Convert a Twitter Future to a Java native Future. This should match the semantics of a Java Future as closely as possible to avoid issues with the way another API might use them. See:

    http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html#cancel(boolean)

    Definition Classes
    Future
  51. def toOffer: Offer[Try[A]]

    An offer for this future.

    An offer for this future. The offer is activated when the future is satisfied.

    Definition Classes
    Future
  52. def toString(): String

    Definition Classes
    Promise → AnyRef → Any
  53. def transform[B](f: (Try[A]) ⇒ Future[B]): Future[B]

    Definition Classes
    ResponderFuture
  54. def transformedBy[B](transformer: FutureTransformer[A, B]): Future[B]

    Transform the Future[A] into a Future[B] using the FutureTransformer.

    Transform the Future[A] into a Future[B] using the FutureTransformer. The FutureTransformer handles both success (Return) and failure (Throw) values by implementing map/flatMap and handle/rescue. This method is typically used by Java programs because it avoids the use of small Function objects.

    Compare this method to addEventListener. The difference is that addEventListener is used to perform a simple action when a computation completes, such as recording data in a log-file. It analogous to a void method in Java: it has side-effects and no return value. transformedBy, on the other hand, is used to transform values from one type to another, or to chain a series of asynchronous calls and return the result. It is analogous to methods in Java that have a return-type. Note that transformedBy and addEventListener are not mutually exclusive and may be profitably combined.

    Note: The FutureTransformer must implement either flatMap or map and may optionally implement handle. Failing to implement a method will result in a run-time (AbstractMethod) error.

    Definition Classes
    Future
  55. def unit: Future[Unit]

    Convert this Future[A] to a Future[Unit] by discarding the result.

    Convert this Future[A] to a Future[Unit] by discarding the result.

    Definition Classes
    Future
  56. def update(result: Try[A]): Unit

    Populate the Promise with the given Try.

    Populate the Promise with the given Try. The try can either be a value or an exception. setValue and setException are generally more readable methods to use.

    Exceptions thrown
    ImmutableResult

    if the Promise is already populated

  57. final def updateIfEmpty(result: Try[A]): Boolean

    Populate the Promise with the given Try.

    Populate the Promise with the given Try. The try can either be a value or an exception. setValue and setException are generally more readable methods to use.

    returns

    true only if the result is updated, false if it was already set.

    Annotations
    @tailrec()
  58. def voided: Future[Void]

    Convert this Future[A] to a Future[Void] by discarding the result.

    Convert this Future[A] to a Future[Void] by discarding the result.

    Definition Classes
    Future
  59. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  60. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  61. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  62. def willEqual[B](that: Future[B]): Promise[Boolean]

    Returns a Future[Boolean] indicating whether two Futures are equivalent.

    Returns a Future[Boolean] indicating whether two Futures are equivalent. Note that Future.exception(e).willEqual(Future.exception(e)) == Future.value(true).

    Definition Classes
    Future
  63. def withFilter(p: (A) ⇒ Boolean): Future[A]

    Definition Classes
    Future
  64. def within(timer: Timer, timeout: Duration): Future[A]

    Returns a new Future that will error if this Future does not return in time.

    Returns a new Future that will error if this Future does not return in time.

    Note: On timeout, the underlying future is not interrupted.

    timeout

    indicates how long you are willing to wait for the result to be available.

    Definition Classes
    Future
  65. def within(timeout: Duration)(implicit timer: Timer): Future[A]

    Same as the other within, but with an implicit timer.

    Same as the other within, but with an implicit timer. Sometimes this is more convenient.

    Definition Classes
    Future

Deprecated Value Members

  1. def apply(timeout: Duration): A

    Block, but only as long as the given Timeout.

    Block, but only as long as the given Timeout.

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 6.2.x) Use Await.result

  2. def apply(): A

    Block indefinitely, wait for the result of the Future to be available.

    Block indefinitely, wait for the result of the Future to be available.

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 6.2.x) Use Await.result

  3. def cancel(): Unit

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 6.0.0) Provided for API compatibility; use raise() instead.

  4. final def get(timeout: Duration): Try[A]

    Demands that the result of the future be available within timeout.

    Demands that the result of the future be available within timeout. The result is a Return[_] or Throw[_] depending upon whether the computation finished in time.

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 6.2.x) Use Await.result

  5. def get(): A

    Alias for apply().

    Alias for apply().

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 6.2.x) Use Await.result

  6. def isReturn: Boolean

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 6.2.x) Use Await.result

  7. def isThrow: Boolean

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 6.2.x) Use Await.result

  8. def void: Future[Void]

    Definition Classes
    Future
    Annotations
    @deprecated
    Deprecated

    (Since version 5.x) 'void' is a reserved word in javac.

Inherited from Responder[A]

Inherited from Future[A]

Inherited from Awaitable[A]

Inherited from AnyRef

Inherited from Any

Ungrouped