Imagaine我有以下代码:
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风格。那么什么是alernatives?
答案 0 :(得分:1)
def request: Future[Result] = {
val p = promise[Result]
new Listener {
def complete(result: Result) = p.success(result)
}
p.future
}
现在你有一个Future[Result]
,你可以传回给你的来电者。如果你有一个异步函数(你这样做),你不应该试图隐藏这个事实。相反,使用未来并让您的来电者使用map
,flatMap
,onSuccess
等。