Как сделать `getOrWaitUntilNonEmpty` как один вкладыш?
У меня есть структура кода высокого уровня, которая выглядит следующим образом:
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 ответ
Пытаться 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"