我的trait方法是:
userService{
def link(current: U, to:User): Future[U]
def findUserByEmail(email:String):Future[Option[User]]
}
执行时使用:
for(link(currentUser, userService.findUserByEmail(email).result(Duration(1000, MILLISECONDS)).get)){
...
}
,错误是:
[error] G:testprojectsmifunmodulesappcontrollers
ProviderController.scala:130: Don't call `Awaitable` methods directly, use the `
Await` object.
我不知道为什么这里必须使用await对象而不是await方法,以及如何正确地更改它
如果你想阻塞你需要使用Await.result(userService.findUserByEmail(email), 1000 millis)
,注意阻塞通常是一个坏主意,因为它阻塞你的主线程等待指定的结果返回,看看onComplete
为例。
像这样:
val futureLink = findUserByEmail(user) flatMap {
maybeUser => maybeUser map (user => link(currentUser, user))
}
futureLink onComplete {
case Success(user:User) => ...
case Success(None) => ...
case Failure(ex) => ...
}
或者,如果您确实需要阻塞,您可以在futureLink
上执行Await.result
。