Как только вы вызываете API, который возвращает Future
, вам необходимо объединить свой код в цепочку для выполнения, когда этот Future
завершится настолько, насколько возможно. Старайтесь не ждать, пока Future
завершится как можно дольше.
Поэтому измените метод так, чтобы он возвращал Future
:
def getValue(arg: String): Future[Boolean] =
SomeObject.getData(arg).map(_.getBooleanValue)
Тогда вместо вызова
nextMethod(getValue(myArg))
Используйте map
на Future
следующим образом:
getValue(myArg).map{ bool =>
nextMethod(bool) // next processing step
}
Это даст новый Future
, который будет содержать результат следующего шага обработки.
Пока это требует повторной обработки вызывающего кода, Scala делает этот вид кода очень простым для написания. Продолжайте связывать операции с предыдущим Future
до тех пор, пока обработка не будет завершена.
В большинстве случаев код заканчивается побочной операцией, такой как отправка сообщения или запись файла, и в этом случае не нужно ждать завершения Future
.
В редких случаях, когда вам нужно дождаться Future
, используйте Await.result
, чтобы восстановить окончательный результат цепочки Future
s