私の方法1では、Option(result1)を返す別のメソッド2を非同期的に呼び出す必要があります。それより、result1が空の場合は別のメソッド3を非同期に呼び出す必要がありますが、result1が空でない場合は返す必要があります。ここScala Future - 理解のため、ミックスシンクと非同期
は方法である:
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)
- このアプローチは、上記のコードで正しいですか?この行は非同期呼び出しを作成しますか?もしそうなら、それを避ける方法は?私はすでにを見つけました。ユーザは非同期で、すでにフェッチされた値を返すだけで非同期呼び出しを追加したくありません。
は右、私が代わりにFuture.successful(foundUser)の将来{foundUser}を記述した場合、それは非同期で実行される、方法であなたに@Yuval Itzchakov – Teimuraz
に感謝しますか? – Teimuraz
@moreoはい、それは 'ExecutionContext'の関数のキューイングを引き起こします。 –