reactor-core/src/main/java/reactor/core/publisher/Mono.java
public final <V> Mono<V> then(Mono<V> other) {
		if (this instanceof MonoIgnoreThen) {
            MonoIgnoreThen<T> a = (MonoIgnoreThen<T>) this;
            return a.shift(other);
		}
		return onAssembly(new MonoIgnoreThen<>(new Publisher[] { this }, other));
	}
public final <V> Mono<V> then(Mono<V> other) {
		if (this instanceof MonoIgnoreThen) {
            MonoIgnoreThen<T> a = (MonoIgnoreThen<T>) this;
            return a.shift(other);
		}
		return onAssembly(new MonoIgnoreThen<>(new Publisher[] { this }, other));
	}
Let this {@link Mono} complete then play another Mono.
<p>
In other words ignore element from this {@link Mono} and transform its completion signal into the
emission and completion signal of a provided {@code Mono<V>}. Error signal is
replayed in the resulting {@code Mono<V>}.

<p>
<img class="marble" src="doc-files/marbles/thenWithMonoForMono.svg" alt="">

@reactor.discard This operator discards the element from the source.

@param other a {@link Mono} to emit from after termination
@param <V> the element type of the supplied Mono

@return a new {@link Mono} that emits from the supplied {@link Mono}