A `Future` represents the result of an
[asynchronous operation](https://docs.cloud.google.com/appengine/docs/standard/services/ndb/async).
When created, it probably doesn't have any result data.
When the operation finishes, the `Future` gets the result.
An application can call a `Future` object's
`get_result()` method; if the result has arrived, the
method returns it; otherwise, it waits for the result to arrive and
*then* returns it.

**Note:** There is no 1:1 mapping between RPCs and Futures. Multiple futures might be tied to a result from a single RPC.

## Instance Methods

check_success()
:   Check to see if the operation succeeded. Waits if necessary.
    Raises an exception if there was a problem; returns `None`
    if there was no problem.

done()
:   Returns `True` if the result (or exception) has arrived;
    otherwise, returns `False`. This function does not wait.

get_exception()
:   Waits if necessary; then returns the exception (or `None` if
    there was no exception). *Returns* the exception, doesn't raise it.

get_result()
:   Waits if necessary; then returns the result or raises the exception.

get_traceback()
:   Waits if necessary; then returns the exception's traceback
    object (or `None` if there was no traceback object).
    Python's
    `http://docs.python.org/library/traceback.html` module has functions to print and work with
    traceback objects.

wait()
:   Waits until a result or exception arrives.
    Always returns `None`.

## Class Methods

wait_all(futures)
:   Wait until all `Futures` in the passed iterable are done.

    **Arguments**

    futures
    :   Iterable of `Future` objects.


    Returns `None`.

wait_any(futures)
:   Wait until at least one of a iterable of `Futures` is done.

    **Arguments**

    futures
    :   Iterable of `Future` objects.


    Returns one `Future` that is done.
    (Returns `None` if the `futures` iterable is empty.)