我的特质方法是:
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:\testprojects\mifun\modules\app\controllers\
ProviderController.scala:130: Don't call `Awaitable` methods directly, use the `
Await` object.
我不知道为什么必须使用await对象而不是等待方法,以及如何正确地更改它。
答案 0 :(得分:7)
如果你想阻止你需要使用Await.result(userService.findUserByEmail(email), 1000 millis)
,请注意阻塞通常是一个坏主意,因为它会阻止主线程等待指定的结果返回,请查看onComplete
例如。
答案 1 :(得分:3)
这样的事情:
val futureLink = findUserByEmail(user) flatMap {
maybeUser => maybeUser map (user => link(currentUser, user))
}
futureLink onComplete {
case Success(user:User) => ...
case Success(None) => ...
case Failure(ex) => ...
}
或者,如果您确实需要阻止,可以Await.result
futureLink
{。}}。