我正在处理一个 3rd-party 库,它为我提供了这样的异步方法调用:
def doSomething1(input:String, callback:String => Any)
def doSomething2(input:Double, callback:String => Any)
该库正在它创建的某个线程上运行东西。
我想在它周围包裹一个演员,这样我就可以ask
把它当作垃圾,但我不确定如何访问它promise
以便我可以满足请求。
天真的方法:
class Wrapper extends Actor {
def receive {
case s:String => doSomething1(s, sender ! _)
case d:Double => doSomething2(d, sender ! _)
}
}
val wrapper = system.actorOf(Props[Wrapper], "wrapper")
然后ask
它的结果:
(wrapper ? "hello").mapTo[String].foreach(println)
(wrapper ? 123.456).mapTo[String].foreach(println)
但结果永远不会回来,大概是因为回调不是来自它ask
编辑的演员。
有什么方法可以访问,promise
所以回调可以success
吗?