ネットワーク サービスに特定のトークンを照会し、そのトークンを予想されるトークンと比較する Scala コードがいくつかあります。予想されるトークンが見つかるまで、または N 回試行に失敗するまで、予想されるトークンを照会し続けたいと考えています。
Java-tacular の方法でそれを行う方法は次のとおりです。
def keepLooking(expectedToken: String, maxTries: Int) {
var tries = 0
var token = ""
do {
Thread.sleep(tries * 1000) // don't overwhelm the service by calling it too fast!
token = makeSomeNetworkCall()
tries += 1
} while (tries <= maxTries && token != expectedToken)
}
もっと機能的にしてほしい。私には1つの考えがあります:
1.to(maxTries) map { tryNum =>
Thread.sleep(tryNum - 1 * 1000) // don't overwhelm the service by calling it too fast!
makeSomeNetworkCall()
} exists (_ == expectedToken)
しかし、これには 2 つの疑問が生じます。
map
は怠惰なので、exists
短絡する必要がありますよね?2 回目の呼び出しでトークンが見つかった場合、10 回のネットワーク呼び出しを行いたくありません。- 私が望むものを達成するためのより慣用的な方法はありますか?