作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个方法addVoteToSong
,例如:
public Mono<Map<Song, VoteKind>> addVoteToSong(Principal principal, String songId, VoteKind voteKind) {
return
userRepository.findUserByUsername(principal.getName())
.doOnSuccess(song -> songRepository.findSongById(songId))
.doOnSuccess(vote -> voteRepository.add(Vote.builder().song()))
.//(the rest of the code)
}
我想传递以下行的结果:
userRepository.findUserByUsername(principal.getName())
和
.doOnSuccess(song -> songRepository.findSongById(songId))
到行中的构建对象:
.doOnSuccess(vote -> voteRepository.add(Vote.builder().song(here result from findSongById).user(here result from findUserByUsername))
问题来了,是否可以在下一个 doOnSuccess 方法中重用之前的 API 调用结果,或者我应该同时拆分 find API 调用,放弃 Reactor 的级联操作?在互联网上,我找到了使用单个 save
方法的示例,而不基于 react 流的间接结果,这就是出现问题的原因。我将不胜感激有关如何实现目标的建议。
最佳答案
马丁,
首先,请注意 .doOnXXX
是 just callbacks这将在某些存档条件下执行。您应该避免将业务逻辑放入其中。
回到问题,我想到的第一个想法是从 zip
运算符中受益。因此,您必须放置 2 个发布者 .findUserByUsername
和 .findSongById
并使用 BiFunction
组合结果。所以你可以尝试以下方法:
public Mono<Map<Song, VoteKind>> addVoteToSong(Principal principal, String songId, VoteKind voteKind) {
return Mono
.zip(
userRepository.findUserByUsername(principal.getName()),
songRepository.findSongById(songId),
(user, song) -> voteRepository.add(Vote.builder().song(song).user(user).build())
)
.flatMap(Function.identity())
// your code is here
}
关于java - 如何将上一步中的 Mono<> 结果传递到下一个 doOnSuccess() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60495321/
我是一名优秀的程序员,十分优秀!