用于向服务器发出重复请求的“while”的替代方法

时间:2013-11-03 06:34:26

标签: scala while-loop future

我有一个函数应该从db或服务器返回结果。但服务器可能会失败并且不返回任何内容,在这种情况下,我需要重复服务器请求,直到它返回结果:

def getToken() = 
  getTokenFromDb orElse getTokenFromServer() map { t =>
    saveTokenToDb(t)
    t
  }

getTokenFromServer()的重复请求有什么明智的解决方案,除非使用while循环,否则我会得到好的响应?可能使用while是一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

这可能听起来很疯狂,但你可以创建一个无限服务器请求流,然后使用“takeWhile + isDefined”:)我认为实际上可能很容易实现。如果我进入我的代码机,我会鞭打一些东西:)

答案 1 :(得分:0)

好吧,只要您没有具体要求尝试服务器尝试的次数,只需使用递归即可。这实际上与while循环几乎相同:)但是更具功能性。 所以使getTokenFromServer()递归。 但是不要忘记尾递归,即从内部对getTokenFromServer()的递归调用必须是其代码中的最后一个代码语句。这样你就不会遇到堆栈溢出的麻烦。