我正在学习如何使用Scala和PlayFramework来完成我正在做的项目。由于我的目标类似于此blog中提供的目标,因此我将代码置于其中。但是,在尝试复制该代码时,我发现此错误
def stats( id: String ) = WebSocket.async[JsValue] { request =>
Hosts.hosts.find( _.id == id ) match {
case Some( host ) => Statistics.attach( host )
case None => {
val enumerator = Enumerator
.generateM[JsValue]( Promise.timeout( None, 1.second ) )
.andThen( Enumerator.eof )
Promise.pure( ( Iteratee.ignore[JsValue], enumerator ) )
}
}
}
错误说值Pure不是对象play.api.libs.concurrent.Promise 的成员,我最初认为,因为这段代码是基于较旧版本的Play,所以有些东西已经改变了。然而,我去检查更改日志和Promise似乎大部分没有变化,根据文档Pure仍然是它的成员。这可能是一件非常简单的事情,但对此我不熟悉我对此错误发生的原因相对困惑,因为代码应该经过试用和测试,并且仍然与此版本兼容。
答案 0 :(得分:4)
那是使用较旧版本的Play库。 Promise.pure
在2.2.x中已弃用,已在2.3.x中删除。您可以改为使用scala.concurrent.Future.successful
。
Future.successful( ( Iteratee.ignore[JsValue], enumerator ) )