Как указано в , проект реактора Javadoc для Mono
, Mono.zip
будет:
Объединить данные моно в новый моно, которое будет выполнено, когда вседанные моносы произвели элемент, агрегируя их значения в соответствии с предоставленной функцией комбинатора.Ошибка или пустое завершение любого источника приведет к тому, что другие источники будут отменены, и получающийся в результате Mono немедленно выдаст ошибку или завершится, соответственно.
Это означает, что для следующего примера:
Mono<User> user = ...
Mono<Account> account = ...
Mono<Info> info = ...
Mono<Tuple3<User, Account, Info>> tuple = Mono.zip(user, account, info);
Вы также получаете:
Tuple
, содержащий все 3 значения, если все прошло нормально - пустое
Mono
, если одно из них завершено как пустое - сигнал об ошибке в случае сбоя одного из них
В последних двух случаях другие сразу отменяются, что означает, что вы не будете знать, получите ли вы ошибку или допустимый элементот них, если все будет продолжаться.Невозможно получить значения, которые уже были разрешены в случае сбоя.
Есть много способов получить более детальное поведение.
Вы можете, в архиве Mono
или любой вышестоящий, добавьте doOnError
операторов для регистрации информации, если что-то не так, или даже onErrorResume
для использования резервных операций;Вы также можете связать retry
операторов, чтобы описать, как / когда следует повторить попытку в случае сбоев.