Самая простая реализация будет выглядеть примерно так:
def withBag(body: Bag => Result): Future[Result] =
withBagAsync(bag => Future.successful(body(bag))
Или, более или менее эквивалентно:
def withBag(body: Bag => Result): Future[Result] =
withBagAsync(body.andThen(Future.successful))
Вам необходимо преобразовать Bag => Result
в Bag => Future[Result]
, и самый простой способ сделать это - составить заданную вами Bag => Result
и Result => Future[Result
функцию, а Future.successful
- это A => Future[A]
функция, которая просто оборачивает аргумент в успешном будущем.
Если аргумент body
для withBag
может завершиться с ошибкой или если вам нужно, чтобы он был выполнен в другом потоке и т. Д., Вместо этого вам может потребоваться что-то вроде этого:
import scala.concurrent.ExecutionContext
def withBag(body: Bag => Result)(implicit ec: ExecutionContext): Future[Result] =
withBagAsync(bag => Future(body(bag)))
Теперьвызывающая сторона может явно или неявно предоставить контекст выполнения, и любые исключения, выданные body(bag)
, будут зафиксированы в неудачном будущем.