将三个操作与WebFlux结合起来



С不知道如何组合三个相互依赖的操作。

我有新用户需要保存到基地:

  1. 从基础中获取项目。

    roleRepo.findByName("USER"); // return Mono<Role>
    user.setRole(...); // set result from roleRepo.findByName("USER") is String
    
  2. 将第一次操作的数据保存到基地

    userRepo.save(user); // return Mono<User>
    
  3. 保存到基本新UserRole

    UserRole uRole = new UserRole();
    urole.setUserId(user.getId); 
    urole.setRoleId(role.Id);  
    userRolesRepo.save(uRole) // return Mono<UserRole>
    

最后方法返回

Mono<User>

至控制器。

使用flatmap组合异步操作。尽量像链条一样使用它们,避免嵌套。

没有测试,但这应该会让你领先:

roleRepo.findByName("USER")
.flatMap(role -> {
user.setRole(role);
return Mono.just(user);
})
.flatMap(user -> userRepo.save(user))
.flatMap(user -> {
UserRole uRole = new UserRole();
urole.setUserId(user.getId); 
urole.setRoleId(role.Id);
return Mono.zip(Mono.just(user), userRolesRepo.save(uRole));
})
.flatMap(data -> Mono.just(data.getT1()));

最新更新