我正在尝试获取持久性事件列表并将其作为响应发送(Action.async
)。但我无法将PersistenceQuery
结果转换为Future
个对象。这是代码
val queries = PersistenceQuery(actorSystem).readJournalFor[CassandraReadJournal](CassandraReadJournal.Identifier)
val source: Source[EventEnvelope, NotUsed] = queries.eventsByPersistenceId("MYID", 0, Long.MaxValue)
val mappedSource: Source[JsValue, NotUsed] = source.mapAsync(1) { e =>
e.event match {
case l: String =>
Future(Json.parse(l))
}
}
val finalResult: Future[List[JsValue]] = mappedSource.take(10).runFold(List[JsValue]())((a, b) => {
println(a)
a :+ b
})
finalResult
我能够在runFold
内看到打印件,但finalResult
永远不会返回。我甚至试过Await
,即使等了几分钟,也没有回来。此finalResult
显示要将其作为响应发送给Action.async
的所有用户活动。
请告诉我们将Source
转换为Future
对象
答案 0 :(得分:1)
首先使用currentEventsByPersistenceId
来修复此问题,这将返回所有当前事件。 eventsByPersistenceId
take
终止了流。但在我的情况下,take
函数需要收集10个事件,在我的情况下,我有少于10个事件,因此在累积至少10个事件之前,流不会被终止。所以结果永远不会被归还。