我再次嘗試更新一些預播放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以及我應該怎樣通過這個過程。
謝謝。你的第三和第四個例子的工作,但這兩個都需要至少幾分鐘輸出第一個結果,感覺應該不會發生。有什麼辦法可以加速你想到的嗎?也出於某種原因,我無法得到第一個例子的工作 - 一個***前瞻性參考的錯誤擴展了價值源***的定義。謝謝 –