【发布时间】:2019-11-19 14:19:03
【问题描述】:
我有以下 kotlin 方法,该方法当前使用返回列表的非反应性 mongodb 存储库(spring 数据)。
fun register(userRegistration: UserRegistration) {
val existing = userRepository.findByTokenOrUserId(userRegistration.deviceToken, userRegistration.userId)
var alreadyRegistered = false
if (existing.isNotEmpty()) {
existing.forEach {
if (!isAlreadyRegistered(it, userRegistration)) {
userRepository.delete(it)
} else {
alreadyRegistered = true
}
}
}
if (!alreadyRegistered) {
val pnUser = PnUser(userRegistration.userId, userRegistration.deviceToken, userRegistration.region, userRegistration.locale, userRegistration.deviceType, userRegistration.osVersion, userRegistration.appVersion, userRegistration.timezone)
userRepository.save(pnUser)
}
}
如果 userRepository.findByTokenOrUserId 将返回 PnUser 的 Flux 而不是 List,我如何以优雅的方式获得相同的行为?
谢谢
【问题讨论】:
-
您可以考虑使用 kotlin 协程,它可以让您像编写命令式一样编写异步代码,并且它支持带有 await 扩展功能的项目反应器
-
@MartinTarjányi 协程在概念上不如响应式编程强大。
-
最优雅的方法是拆分
Flux并为现有用户过滤一个,另一个为不存在的用户过滤。然后做任何你想做的逻辑,最后将它们合并在一起。
标签: kotlin spring-data-mongodb project-reactor