从侦听器获取异步结果

Obtain asyncronous result from listener

假设我有以下代码:

class Listener {

  //excuted by thread 1
  //called when request is finshed
  def complete(result: Result) = //get result as return value for request

}


//excuted by thread 2
def request: Result = {
  //Do something that invokes Listener.complete
  //return result from listener
}

正如我已经在评论中写的那样,我想获得 Listener.complete 函数的结果作为我的请求函数的结果。我可以通过将锁与 var 组合来存档,但这不是好的 scala 风格。那么有哪些选择呢?

def request: Future[Result] = {
  val p = promise[Result]

  new Listener {
    def complete(result: Result) = p.success(result)
  }

  p.future
}

现在您有一个 Future[Result] 可以传回给您的呼叫者。如果你有一个异步函数(你有),你不应该试图隐藏这个事实。相反,使用 future 并让你的调用者使用它,使用 mapflatMaponSuccess