我再次尝试更新一些预播放2.5代码(基于此vid)。例如,以下以前是如何流式未来:Stream Play in Play 2.5
Ok.chunked(Enumerator.generateM(Promise.timeout(Some("hello"), 500)))
我已经创建了下面的方法用于使用阿卡的变通为Promise.timeout
(废弃):
private def keepResponding(data: String, delay: FiniteDuration, interval: FiniteDuration): Future[Result] = {
val promise: Promise[Result] = Promise[Result]()
actorSystem.scheduler.schedule(delay, interval) { promise.success(Ok(data)) }
promise.future
}
根据Play Framework Migration Guide; Enumerators
应改写为源和Source.unfoldAsync
明显的Enumerator.generateM
相当于所以我希望这会工作(其中str
是Future[String]
):
def inf = Action { request =>
val str = keepResponding("stream me", 1.second, 2.second)
Ok.chunked(Source.unfoldAsync(str))
}
当然,我得到一个类型不匹配错误,望着unfoldAsync
的情况下,类签名时:
final class UnfoldAsync[S, E](s: S, f: S ⇒ Future[Option[(S, E)]])
我可以看到,参数不正确的,但我不完全underst以及我应该怎样通过这个过程。
谢谢。你的第三和第四个例子的工作,但这两个都需要至少几分钟输出第一个结果,感觉应该不会发生。有什么办法可以加速你想到的吗?也出于某种原因,我无法得到第一个例子的工作 - 一个***前瞻性参考的错误扩展了价值源***的定义。谢谢 –