The following code was about to first delete a KV from redis, and then set a new KV there and return. But it actually never set after delete. I only see mistake after print every log, as 2 any is MonoNext. Then I released a chain step before this any needs to split off one Mono, so I used flatMap instead of map at marker. This problem is more likely happened to me, especially when functions are deeply encapsulated inside another function with Mono in and out.
@RequestMapping("addUserSimple3") public Mono<AddUserResponse> addUser3(@RequestBody Mono<AddUserVo> vo) { return vo.flatMap(v -> redisOps.delete(v.getGroupId()) .map(any -> { <---------------------Use flatMap instead of map log.info("1 any is {}", any); return redisOps.set(v.getGroupId(), v.getPersonId()); }) .map(any -> { log.info("2 any is {}", any); return new AddUserResponse(ResponseState.GOOD, v.getLogId()); }) ); } Then my question is, how to better understand MonoNext and flatMap? (aka, I let the above code work by replacing map but I don't understand why it did not work, and why it does later)