我有一个有趣的问题,如果不调用方法我不知道如何解决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
提交
取消