reactor-core/src/main/java/reactor/core/publisher/Mono.java
public static <R>  Mono<R> zipDelayError(Function<? super Object[], ? extends R>
			combinator, Mono<?>... monos) {
		if (monos.length == 0) {
			return empty();
		}
		if (monos.length == 1) {
			return monos[0].map(d -> combinator.apply(new Object[]{d}));
		}
		return onAssembly(new MonoZip<>(true, combinator, monos));
	}
public static <R>  Mono<R> zipDelayError(Function<? super Object[], ? extends R>
			combinator, Mono<?>... monos) {
		if (monos.length == 0) {
			return empty();
		}
		if (monos.length == 1) {
			return monos[0].map(d -> combinator.apply(new Object[]{d}));
		}
		return onAssembly(new MonoZip<>(true, combinator, monos));
	}
Merge given monos into a new {@literal Mono} that will be fulfilled when all of the
given {@literal Monos} have produced an item, aggregating their values according to
the provided combinator function and delaying errors.
If a Mono source completes without value, all other sources are run to completion then
the resulting {@link Mono} completes empty.
If several Monos error, their exceptions are combined (as suppressed exceptions on a root exception).

<p>
<img class="marble" src="doc-files/marbles/zipDelayErrorVarSourcesWithZipper.svg" alt="">
<p>
@param monos The monos to use.
@param combinator the function to transform the combined array into an arbitrary
object.
@param <R> the combined result

@return a combined {@link Mono}.