Scala “的替代方案”;而";用于向服务器发出重复请求
我有一个函数,可以从数据库或服务器返回结果。但是服务器可能会失败并且什么也不返回,在这种情况下,我需要重复服务器请求,直到它返回结果:Scala “的替代方案”;而";用于向服务器发出重复请求,scala,while-loop,future,Scala,While Loop,Future,我有一个函数,可以从数据库或服务器返回结果。但是服务器可能会失败并且什么也不返回,在这种情况下,我需要重复服务器请求,直到它返回结果: def getToken() = getTokenFromDb orElse getTokenFromServer() map { t => saveTokenToDb(t) t } 对于重复请求getTokenFromServer(),直到得到良好响应为止(除了使用while循环之外),什么是合理的解决方案?也许使用,而是一个
def getToken() =
getTokenFromDb orElse getTokenFromServer() map { t =>
saveTokenToDb(t)
t
}
对于重复请求
getTokenFromServer()
,直到得到良好响应为止(除了使用while
循环之外),什么是合理的解决方案?也许使用,而是一个好的解决方案?好吧,只要您对要尝试多少次服务器没有具体要求,就使用递归。事实上,这几乎与while循环相同:),但更具功能性。
因此,让getTokenFromServer()递归。
但不要忘记尾部递归,即从内部对getTokenFromServer()的递归调用必须是其代码中的最后一条代码语句。这样,您就不会遇到堆栈溢出的任何问题。这听起来可能很疯狂,但您可以创建无限的服务器请求流,然后使用“takeWhile+isDefined”:)我认为这实际上可能很容易实现。如果我使用我的代码机器,我会想出一些东西:)我现在意识到,这基本上是已经存在的建议(以更好的形式,真的)。