【问题标题】:Pure not a member of objective Promise in PlayFramework纯粹不是 PlayFramework 中目标 Promise 的成员
【发布时间】:2014-12-30 23:53:10
【问题描述】:

我正在学习如何在我正在做的项目中使用 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 ) )
    }
  }

}

错误说 value Pure 不是对象 play.api.libs.concurrent.Promise 的成员,最初我认为由于此代码基于旧版本的 Play,因此发生了一些变化。但是我去检查了更新日志,Promise 似乎几乎没有变化,根据文档,Pure 仍然是其中的一员。这可能是非常简单的事情,但对于这个我很陌生,为什么会发生这个错误,因为代码应该经过尝试和测试并且仍然与这个版本兼容。

【问题讨论】:

    标签: scala playframework playframework-2.0


    【解决方案1】:

    这使用的是更旧版本的 Play 库。 Promise.pure 在 2.2.x 中已弃用,并在 2.3.x 中删除。您可以改用scala.concurrent.Future.successful

    Future.successful( ( Iteratee.ignore[JsValue], enumerator ) )
    

    【讨论】:

    • 嗯,我在 2.3 的迁移更改中检查了这一点,但我没有发现它被删除。一定是以某种方式忽略了它。
    • 即使包含“scala.concurrent.Future.successful”,我也会收到一条错误消息,提示未找到 Future。
    • import scala.concurrent.Future ?
    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 2011-08-14
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多