У меня есть actorA, который берет данные из dataActor и отвечает данными на requestActors:
class A extends Actor {
var data = Option.empty[Int]
val requestors = mutable.Set[ActorRef]
def receive = {
case data: Int =>
this.data = Some(data)
requestors.foreach {_ ! data}
case Request =>
if (data.isEmpty) {
requestors.add(sender)
//What should I send back to sender here?
} else {
sender ! data.get
}
}
}
В актере отправителя я использую шаблон запроса:
(actorA ? Request()).map {
//if the data is not ready here, how can I wait for data?
}
В субъекте поставщика данных он отправляет данные субъекту A:
dataActor ! 100
Проблема в том, что данные могут быть не готовы, когда запрашивающий запрашивает их, поэтому Future from ask может потерпеть неудачу. Мне нужно отправить отправителю что-то, чтобы пообещать, что есть данные, но, видимо, Акка, похоже, не обещает AKAIK.
Как это реализовать здесь?