【问题标题】:Play Framework: how to display a Future[List[String]]?Play Framework:如何显示 Future[List[String]]?
【发布时间】:2014-09-13 02:01:01
【问题描述】:

我正在探索 Play Framework,但遇到了一些问题。

使用 WS 库对 Google Analytics 进行 API 调用后,我收到了一个 Future[Response] 对象。在消化了那个 Response 对象之后,我得到了我真正关心的数据,但是因为它被包裹在一个 Future 中,所以我在将它写入浏览器时遇到了一些麻烦。

OK( gaApiString )

这给了我一个错误,内容如下:

无法将 scala.concurrent.Future[String] 的实例写入 HTTP 回复。尝试定义一个 Writeable[scala.concurrent.Future[String]]

我在查找和理解如何使用 Writable 对象时遇到了一些麻烦。一点帮助?

【问题讨论】:

    标签: scala http playframework future


    【解决方案1】:

    您需要将map Future 传递给Future[Result],然后将其传递给Action.async

    def test = Action.async { 
    
        val wsResult: Future[String] = ...
    
        wsResult.map { gaApiString => 
            Ok(gaApiString)
        }
    
    }
    

    如果gaApiString 实际上是List[String],那么这取决于你想用它做什么。将其显示为逗号分隔的列表,您只需将其更改为 Ok(gaApiString.mkString(","))。这里的关键是映射Future 以在完成后操作该值。

    【讨论】:

    • 完美。我所要做的就是将.async 添加到我当前的操作中(例如def updateFeed = Action.async { ...),一切就都到位了。谢谢。
    • 更简洁的替代方案:wsResult.map{ Ok(_)}
    猜你喜欢
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多