我的目标是找到一个有效的"船员"用户传递路线中的密钥的位置。如果找到了工作人员,我们将尝试找到演员/主管并告诉它开始。在代码中,我故意给出错误的actor路径,因此它将抛出" ActorNotFound"例外。我期待它匹配"失败(失败)"所以我可以回复一个糟糕的请求;但它一直落入"成功"。那是为什么?
代码:
def index = Action.async {
val crewType = "x"
Future(Crew.findCaptainByCrewType(crewType)).flatMap(_.fold(
Future(BadRequest(s"Invalid crew name provided: $crewType; will not run."))
)(crew =>
Future(Try(system.actorSelection(s"/user/${crew.cptName}randomness").resolveOne().map {actorRef =>
actorRef ! "hi hi"
}) match {
case Success(success) =>
Logger.info("success")
Ok("success")
case Failure(ex) =>
Logger.error("failure", ex)
BadRequest("failure")
}
)))
}
答案 0 :(得分:3)
resolveOne()
会返回一个Future
,这是Try
的异步版本,你不应该把它包装在Try中,因为你在里面做的是创建一个新的{{1}总是有效的。这个未来只会在例外情况下完成。
同时避免为可立即返回的内容创建异步Future
,例如使用Future
。
Future.successful
这将返回已完成的Future.successful(BadRequest(s"Invalid crew name provided: $crewType; will not run."))
,无需在任何地方安排。
这是应该做你想做的代码
Future