2016-12-02 9 views
1

지속적인 이벤트 목록을 가져 와서 응답 (Action.async)으로 보내려고합니다. 그러나 PersistenceQuery 개의 결과를 Future 개체로 변환 할 수 없습니다. 여기에 내가 runFold 내에서 인쇄물을 볼 수 있어요 코드Play framework, Akka Persistence, PersistenceQuery, Action.async의 Future Object로 소스를 변환 할 수 없습니다.

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 

이지만, finalResult는 반환되지 않았다. 나는 심지어 Await에 노력했다, 심지어 분 동안 기다리고 난 후에, 결코 돌아 오지 않았다. 이 finalResult은 응답으로 응답을 보내려는 모든 사용자 활동을 Action.async으로 표시합니다. 나에게이 문제에 대한 Source 객체 Future

답변

1

수정이 currentEventsByPersistenceId를 사용하는 것이 바람직하다 변환 할 수있는 방법이 무엇인지 알려 주시기 바랍니다, 이것은 현재의 모든 이벤트를 반환합니다. eventsByPersistenceIdtake은 스트림을 종료합니다. 하지만 내 경우에 take 함수는 수집 할 이벤트가 10 개 필요하며 10 개 미만인 경우 10 개 이상의 이벤트가 누적 될 때까지 스트림이 종료되지 않습니다. 결과가 결코 반환되지 않았습니다.

+0

고마워요! 이것은 문서에서 강조 표시되어야합니다. – Ikrom