Parameters:
         callback ("Callable") -- a "Callable" that takes this
         "Future" as the only argument.
  Returns:
     A new "Future" object that holds the return value of the
     "callback" and will be marked as completed when the given
     "callback" finishes.

  Return type:
     *Future*[*S*]

  Note:

    Note that if the callback function throws, either through the
    original future being completed with an exception and calling
    "fut.wait()", or through other code in the callback, the
    future returned by "then" will be marked appropriately with
    the encountered error. However, if this callback later
    completes additional futures, those futures are not marked as
    completed with an error and the user is responsible for
    handling completion/waiting on those futures independently.

  Example::
     >>> def callback(fut):
     ...     print(f"RPC return value is {fut.wait()}.")
