我使用喷涂路由指令编写了以下代码:
path("goal" / Segment) { id =>
get {
detach(ec) {
val goal = srv.find(id)
complete(goal)
}
} ~
delete {
detach(ec) {
srv.delete(id)
complete(OK)
}
}
}
问题是执行路径很奇怪。首先,它转到
get-> detach-> srv.find->完成
然后到删除 - >分离 - > srv.delete - >完成
然后它回到
get-> detach-> ...
并在那里完成。问题是srv.delete被执行,这不是一个理想的行为,因为我丢失了数据。任何人都可以解释我这种行为并告诉我如何解决它?
提前谢谢。
答案 0 :(得分:2)
我有同样的问题,它看起来像是与Spray route DSL相关的东西,我解决了它在路径中添加命令:
(get & path("goal" / Segment)) { id =>
detach(ec) {
val goal = srv.find(id)
complete(goal)
}
} ~
(delete & path("goal" / Segment)) { id =>
detach(ec) {
srv.delete(id)
complete(OK)
}
}
很高兴看到另一个解决方案是诚实的,而不是总是复制路径,但到目前为止,这是唯一有效的方法。
答案 1 :(得分:2)
我不明白为什么,但似乎这种修改工作正常:
path("goal" / Segment) { id =>
get {
detach(ec) {
val goal = srv.find(id)
complete(goal)
}
} ~
delete {
detach(ec) {
complete {
srv.delete(id) // here
OK
}
}
}
}
文档here中的示例仅显示分离后仅出现完成/拒绝指令的情况。因此我怀疑它只是用这些进行了测试。