public final Mono<T> doOnSuccessOrError(BiConsumer<? super T, Throwable> onSuccessOrError) {
    """
	Add behavior triggered when the {@link Mono} terminates, either by completing successfully or with an error.
	
	<ul>
	<li>null, null : completing without data</li>
	<li>T, null : completing with data</li>
	<li>null, Throwable : failing with/without data</li>
	</ul>
	
	<p>
	<img class="marble" src="doc-files/marbles/doOnTerminateForMono.svg" alt="">
	
	@param onSuccessOrError the callback to call {@link Subscriber#onNext}, {@link Subscriber#onComplete} without preceding {@link Subscriber#onNext} or {@link Subscriber#onError}
	
	@return a new {@link Mono}
    """
		Objects.requireNonNull(onSuccessOrError, "onSuccessOrError");
		return onAssembly(new MonoPeekTerminal<>(this, null, onSuccessOrError, null));
	}
public final Mono<T> doOnSuccessOrError(BiConsumer<? super T, Throwable> onSuccessOrError) {
		Objects.requireNonNull(onSuccessOrError, "onSuccessOrError");
		return onAssembly(new MonoPeekTerminal<>(this, null, onSuccessOrError, null));
	}
public final Mono < T > doOnSuccessOrError ( BiConsumer < ? super T , Throwable > onSuccessOrError ) { Objects . requireNonNull ( onSuccessOrError , "onSuccessOrError" ) ; return onAssembly ( new MonoPeekTerminal <> ( this , null , onSuccessOrError , null ) ) ; }
Add behavior triggered when the {@link Mono} terminates, either by completing successfully or with an error.

<ul>
<li>null, null : completing without data</li>
<li>T, null : completing with data</li>
<li>null, Throwable : failing with/without data</li>
</ul>

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

@param onSuccessOrError the callback to call {@link Subscriber#onNext}, {@link Subscriber#onComplete} without preceding {@link Subscriber#onNext} or {@link Subscriber#onError}

@return a new {@link Mono}
Add behavior triggered when the { @link Mono } terminates either by completing successfully or with an error .