 * // prints "a" at t=0.5s
 * // prints "b" at t=1.0s
 * // prints "c" at t=1.5s
 * ```
 *
 * See also the [`async()` function](#async) for more details.
 *
 * Once the promise is fulfilled, this function will return whatever the promise
 * resolved to.
 *
 * Once the promise is rejected, this will throw whatever the promise rejected
 * with. If the promise did not reject with an `Exception` or `Throwable`, then
 * this function will throw an `UnexpectedValueException` instead.
 *