我有一个用Kotlin写的WebApplication。这是一种有点不和的聊天。我有一个函数,它做几件事。该函数本身用于删除用户的帐户,但是在这样做的同时,它也删除了他从数据库中注销的消息,他将从数据库中的所有组中删除,在他是管理员的组中选择一个新的管理员。
而这个函数看起来确实是这样的:
fun deleteAccount(userId: String) : Flux<Void>{
return groupRepository.findAllByAdmin(userId)
.flatMap{
if(it.users.size<1) groupRepository.deleteById(it._id)
it.admin = it.users[0]
it.users.remove(userId)
groupRepository.save(it)
}
.flatMap {
messageRepository.deleteMessageByUserId(userId)
userRepository.deleteById(userId)
}
}
我的存储库如下所示:
@Repository
interface GroupRepository : ReactiveCrudRepository<GroupRequest, String> {
fun findByName(name: String): Mono<GroupRequest>
fun existsByName(name: String): Mono<Boolean>
fun findAllByAdmin(admin:String) : Flux<GroupRequest>
}
@Repository
interface MessageRepository : ReactiveCrudRepository<Message, String> {
fun findMessageByGroupId(groupId: String): Flux<Message>
fun deleteMessageByUserId(userId:String) : Mono<Void>
}
所以我的函数中的最后2个语句返回一个空单声道。问题是先执行哪条语句并不重要,只执行了两条语句中的一条,我现在尝试了几种方法,包括flux.zip
,但它并不完全有效。如果我把deleteMessages放在第一位,除了数据库中删除用户的部分外,所有内容都可以工作。这个函数的问题在哪里,我该如何修复它?
我通过压缩第二个flatMap中的两个语句来修复它,如下所示:
fun deleteAccount(userId: String) : Flux<Void>{
return groupRepository.findAllByAdmin(userId)
.flatMap{
if(it.users.size<1) groupRepository.deleteById(it._id)
it.admin = it.users[0]
it.users.remove(userId)
groupRepository.save(it)
}
.flatMap {
Mono.zip(messageRepository.deleteMessageByUserId(userId),userRepository.deleteById(userId)).map {
it.t1
}
}
}
问题内容: 更新2: 那么这是它可以获得的最优化的吗? 更新1: 我知道我可以给sql查询增加限制,但是我也想摆脱foreach循环,这是我不应该需要的。 原始问题: 我有以下脚本,由于“ foreach”部分的缘故,它是从数据库返回许多行的良好IMO。 如果我知道我将总是只从数据库中获得1行,该如何优化它。如果我知道我只会从数据库中获得1行,我不明白为什么需要foreach循环,但是我不知道如何
问题内容: 有没有更简洁,有效或简单的pythonic方法来执行以下操作? 编辑: 我实际上发现这比使用operator.mul快一点: 给我 问题答案: 不使用lambda: 更好,更快。使用python 2.7.5 在以下配置中: python 2.7.5的结果 结果:如果用作数据结构,则速度最快(小型阵列为18x,大型阵列为250x) 使用python 3.3.2: python 3更慢吗?
问题内容: 提交表单时,我正在运行此表单检查: 该脚本有效,如果数据== 1,它会警告键已经存在,但是表单仍在提交。我以为如果data == 1则返回false将停止处理表单,但是无论如何它都会继续并添加键,并且弹出键已经存在。如果data == 1,如何阻止表单提交?我什至尝试这样做: 然后删除脚本底部的return true,但是会发生相同的问题。弹出窗口出现,但表单仍得到处理。 问题答案:
问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:
我如何传递我的异常,以便使用者将看到我在单声道中传递的原始异常?希望我的问题很清楚,提前谢谢
我遇到了一个问题,似乎无法使用fxml从javafx中的新表单返回值。 我试图有一个主要的形式,它有4个功能,与游戏的连接4开始游戏,查看玩家,查看游戏,查看玩家游戏 当我启动程序时,会弹出主菜单,然后我想单击“开始游戏”按钮。打开后,将提示输入用户1的信息。然后弹出一个关于玩家信息的新表单。 我遇到的问题是,单击accept按钮后,类中的变量变为null,我尝试通过instance get方法从