Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala “的替代方案”;而";用于向服务器发出重复请求_Scala_While Loop_Future - Fatal编程技术网

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”:)我认为这实际上可能很容易实现。如果我使用我的代码机器,我会想出一些东西:)

我现在意识到,这基本上是已经存在的建议(以更好的形式,真的)。