2015-12-18 3 views
0

Я пытаюсь собрать список будущих пользовательских объектов из актеров Akka, это мой код:Сочинение Будущее Список Akka Scala

var game_manager_backends: List[ActorRef] = List() 

    implicit val ec = context.dispatcher 
    val taskFutures: List[Future[Game]] = game_manager_backends map { gm_be => 
     implicit val timeout = Timeout(5 seconds) 
     val result = gm_be ? GameStatus 
    } 


    val searchFuture = Future sequence taskFutures 

    searchFuture.onSuccess { 
     case results: List[Game] => origin ! results 
    } 

Это

game_manager_backends 

является список, который содержит все актер, я хочу спросить объект Game, затем я хочу собрать все это Game Объекты в списке и отправить обратно актеру происхождения, с этой реализацией это ошибка, которая дает мне на линии map:

type mismatch; found : List[Unit] required: List[scala.concurrent.Future[common.Game]] 

Как я могу решить эту проблему?

Благодаря

+1

Удалить 'val result =' или добавить еще одну строку с 'result' stmt. – Rumoku

+0

если я удаляю 'val result =' это ошибка: 'type mismatch; found: List [scala.concurrent.Future [Any]] required: List [scala.concurrent.Future [common.Game]] ' – Piero

ответ

0

Изменение val result = gm_be ? GameStatus в val result = (gm_be ? GameStatus).mapTo[Game]. Вам также не нужно, чтобы это было val.

+0

, если я это сделаю '(gm_be? GameStatus) .mapTo [Game]' без 'val result =' works – Piero

+0

Я довольный. Надеюсь, это помогло. – nattyddubbs

0
  1. Вы Unit причины не возвращать никакого значения внутри map (исправления этого предложенного выше в комментарии).

  2. ? ask on akka возвращает Future[Any], но вы хотите, чтобы Future[common.Game] исправить это - требуется дополнительное сопоставление.

result map { case [email protected] => a }

+0

вы можете написать мой код выше с помощью вашего решения? потому что я не понимаю, что вы имеете в виду, спасибо – Piero

+0

см. мой комментарий в другом ответе @nattyddubbs – Piero

Смежные вопросы