@Nonnull
    default Promise<Void> thenRunDelayedAsync(@Nonnull Runnable action, long delayTicks) {
        return thenApplyDelayedAsync(Delegates.runnableToFunction(action), delayTicks);
    }
Returns a new Promise that, when this promise completes normally, executes
the given task, after the delay has elapsed.

@param action the action to run before completing the returned future
@param delayTicks the delay in ticks
@return the new promise
helper/src/main/java/me/lucko/helper/promise/Promise.java