Как сделать `getOrWaitUntilNonEmpty` как один вкладыш? - PullRequest
2 голосов
/ 22 мая 2019

У меня есть высокоуровневая структура кода, которая выглядит следующим образом:

val block: (=> Option[Seq[String]]) = ...
val matches = block().get.toArray

Проблема в том, что этот код может завершиться ошибкой, т.е. .get означает None в зависимости от времени, например, я страница- слишком часто удаляя Google, тогда я бы подождал и повторил попытку ...

Я могу сделать ожидание, как это, то есть случайное ожидание между 11-16 с:

val random = new Random()
Thread.sleep((11000 * random.nextFloat() + 6000).ceil.toInt)

Что быэлегантный однострочный способ цикла [ожидания], пока результат выполнения block не будет пустым?Что-то вроде:

val timeInMillis = (11000 * random.nextFloat() + 6000).ceil.toInt
block().getOrWaitUntilNonEmpty(timeInMillis).toArray

1 Ответ

1 голос
/ 22 мая 2019

Попробуйте softwaremill/retry вроде так

retry.Pause(max = 10, Defaults.delay)(odelay.Timer.default) {
  block
}

с зависимостями

"com.softwaremill.retry"  %% "retry"       % "0.3.2"
"com.softwaremill.odelay" %% "odelay-core" % "0.3.0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...