0

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

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

除了使用循环之外,getTokenFromServer()在我得到良好响应之前,重复请求的明智解决方案是什么?while也许使用while是一个很好的解决方案?

4

2 回答 2

2

这听起来很疯狂,但您可以创建一个无限的服务器请求流,然后使用“takeWhile + isDefined”:) 我认为这实际上可能很容易实现。如果我拿到我的密码机,我会做点什么:)

于 2013-11-03T17:47:33.513 回答
0

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

于 2013-11-03T11:19:35.933 回答