" Don't call `Awaitable` methods directly, use the `Await` object."的 scala 未来错误



我的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

相关内容

最新更新