15

我在演员中有以下代码

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's not map, but maybe another function        
    }
}

我觉得未来的链接会更好。

4

2 回答 2

33

您可以为此使用管道模式。就在import akka.pattern.pipe那时,您将能够使用future pipeTo actor.

于 2013-05-06T15:03:30.007 回答
11

如果您希望在发生故障时有一个空列表,您可能希望有“recover”和“pipeTo”的链式调用。

于 2013-05-06T15:25:24.697 回答