В моем методе1 мне нужно асинхронно вызвать другой метод2, который возвращает Option (результат1). Затем, если результат1 пуст, мне нужно асинхронно вызвать другой метод3, но если результат1 НЕ пуст, мне просто нужно вернуть его.
Вот метод:
def signIn(username: String): Future[User] = {
for {
foundUser <- userService.findByUsername(username) // this method returns Future[Option[User]],
// foundUser is Option[User]
user <- if (foundUser.isEmpty) {
val newUser = User(username = "User123")
userService.create(newUser).map(Some(_)) // this method returns Future[Option[User]]
}
else
// Here I want to return just foundUser, of course, it is not possible.
// IS THIS APPROACH CORRECT?? DOES THIS LINE CREATE ASYNCHRONOUS CALL?
Future.successful(foundUser)
} yield user
}
Вопрос:
Future.successful(foundUser)
- правильный ли подход в приведенном выше коде? Эта строка создает асинхронный вызов? Если да, то как этого избежать? Я уже получил foundUser асинхронно и не хочу делать дополнительный асинхронный вызов только для возврата уже полученного значения.