In meiner Methode1 muss ich eine andere Methode2 asynchron aufrufen, die Option (Ergebnis1) zurückgibt. Dann, wenn result1 leer ist, muss ich eine andere Methode3 asynchron aufrufen, aber wenn result1 NICHT leer ist, muss ich sie einfach zurückgeben. HierScala Future - zum Verständnis, Mix Sync und Async
ist die Methode:
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
}
Frage ist:
Future.successful(foundUser)
- ist dieser Ansatz richtig in dem obigen Code? Erstellt diese Zeile einen asynchronen Aufruf? Wenn ja, wie vermeide ich das? Ich habe bereits foundUser asynchron abgerufen, und ich möchte nicht zusätzliche Async-Aufruf nur um bereits abgerufenen Wert zurückgeben.
danke @Yuval Itzchakov – Teimuraz
durch die Art und Weise, wenn ich schreibe Zukunft {foundUser} statt Future.successful (foundUser), es asynchron ausgeführt wird, nicht wahr? – Teimuraz
@ moreo Ja, es wird das Einreihen der Funktion in den 'ExecutionContext' verursachen. –