@Nonnull
    default Promise<Void> thenRunDelayedSync(@Nonnull Runnable action, long delay, @Nonnull TimeUnit unit) {
        return thenApplyDelayedSync(Delegates.runnableToFunction(action), delay, unit);
    }
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 delay the delay
@param unit the unit of delay
@return the new promise
helper/src/main/java/me/lucko/helper/promise/Promise.java