我有一个函数应该从db或服务器返回结果。但服务器可能会失败并且不返回任何内容,在这种情况下,我需要重复服务器请求,直到它返回结果:
def getToken() =
getTokenFromDb orElse getTokenFromServer() map { t =>
saveTokenToDb(t)
t
}
对getTokenFromServer()
的重复请求有什么明智的解决方案,除非使用while
循环,否则我会得到好的响应?可能使用while
是一个很好的解决方案吗?
答案 0 :(得分:2)
这可能听起来很疯狂,但你可以创建一个无限服务器请求流,然后使用“takeWhile + isDefined”:)我认为实际上可能很容易实现。如果我进入我的代码机,我会鞭打一些东西:)
答案 1 :(得分:0)
好吧,只要您没有具体要求尝试服务器尝试的次数,只需使用递归即可。这实际上与while循环几乎相同:)但是更具功能性。 所以使getTokenFromServer()递归。 但是不要忘记尾递归,即从内部对getTokenFromServer()的递归调用必须是其代码中的最后一个代码语句。这样你就不会遇到堆栈溢出的麻烦。