从侦听器获取异步结果
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 并让你的调用者使用它,使用 map
、flatMap
、onSuccess
等
假设我有以下代码:
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 并让你的调用者使用它,使用 map
、flatMap
、onSuccess
等