@Nonnull
    default Promise<Void> thenAccept(@Nonnull ThreadContext context, @Nonnull Consumer<? super V> action) {
        switch (context) {
            case SYNC:
                return thenAcceptSync(action);
            case ASYNC:
                return thenAcceptAsync(action);
            default:
                throw new AssertionError();
        }
    }
Returns a new Promise that, when this promise completes normally, is
executed with this promise's result as the argument to the given
action.

@param context the type of executor to use to supply the promise
@param action the action to perform before completing the returned future
@return the new promise
helper/src/main/java/me/lucko/helper/promise/Promise.java