我有一個有趣的問題,如果不調用方法我不知道如何解決block()。我的方法接收用戶作為參數。它調用外部服務并接收 Mono如果 Mono 不包含錯誤并且user.getDepartment().startsWith("Development")我想將其添加到 FluxFlux 應該是我方法的結果block()不幸的是,現在我應該在調用我收到的 Mono的 -method 之前從列表中初始化 Flux : Flux<User> getUsers(User user) { List<Users> developmentUsers = new ArrayList<User>(); while (user.containsManager()) { val resultUser = externalUserServiceClient.getManager(user).block(); //externalUserServiceClient.getManager(user) should return a Mono<User> if (resultUser.getDepartment().startsWith("Development")) developemtnUsers.add(resultUser); user = resultUser; } return Flux.fromIterable(developmentUsers); }我確信應該有一種方法可以不中斷異步進程鏈。你知道如何?
2 回答

MMMHUHU
TA貢獻1834條經驗 獲得超8個贊
您可以使用Mono#expand
遞歸應用getManager
函數并將結果合并到Flux<User>
:
Flux<User> getUsers(User user) {
return getManager(user).expand(manager -> getManager(manager));
}
Mono<User> getManager(User user) {
if (user.containsManager()) {
return externalUserServiceClient.getManager(user)
.filter(manager -> manager.getDepartment().startsWith("Development"));
} else {
return Mono.empty();
}
}

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
通過使用
externalUserServiceClient.getManager(user).map(manager -> ...);
//or
externalUserServiceClient.getManager(user).flatMap(manager -> ...);
添加回答
舉報
0/150
提交
取消