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 に答える