Akka: Отправить будущее сообщение актеру - программирование

Akka: Отправить будущее сообщение актеру

У меня есть код внутри актера

def receive = {
    case All() => {
        val collection: BSONCollection = db("ping")
        val future:Future[List[Ping]] = collection.find(BSONDocument()).cursor[Ping].toList()
        val zender = sender
        future onComplete {
            case Success(list) => zender ! list
            case Failure(throwable) => zender ! List()
        }
    }
}

Мне не нравится, как я должен использовать функцию onComplete, чтобы отправить результат обратно на отправителя. Я хотел бы знать, можно ли преобразовать его в нечто подобное:

def receive = {
    case All() => {
        val collection: BSONCollection = db("ping")
        val future:Future[List[Ping]] = collection.find(BSONDocument()).cursor[Ping].toList()
        "sender ! future" // one option
        "future.map( list => sender ! list)" //Another option. I know it not map, but maybe another function        
    }
}

Я чувствую, что это улучшается с будущей цепью.

4b9b3361

Ответ 1

Вы можете использовать шаблон трубы для этого. Просто import akka.pattern.pipe, а затем вы сможете передавать сообщения с фьючерсов участникам с помощью future pipeTo actor.

Ответ 2

Если вы хотите иметь пустой список, когда произошел сбой, вы, вероятно, захотите иметь цепочку вызовов "восстановить" и "pipeTo".