scala未来错误"不要直接调用“Awaitable”方法,使用“Await”对象。"

时间:2014-08-05 06:09:51

标签: scala asynchronous

我的特质方法是:

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对象而不是等待方法,以及如何正确地更改它。

2 个答案:

答案 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 {。}}。