【问题标题】:combine three operations with WebFlux将三个操作与 WebFlux 结合起来
【发布时间】:2021-08-21 14:05:00
【问题描述】:

Сan不明白如何组合三个相互依赖的操作。

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

  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 uRole = new UserRole();
          urole.setUserId(user.getId); 
          urole.setRoleId(role.Id);  
          userRolesRepo.save(uRole) // return Mono<UserRole>
    

最后方法返回

 Mono<User>

到控制器。

【问题讨论】:

    标签: java spring-boot spring-webflux


    【解决方案1】:

    使用 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()));
    

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 1970-01-01
      • 2015-01-04
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 2018-06-12
      相关资源
      最近更新 更多