2
Ich erwarte, dass der folgende Code syncResult
mit "String zwei" ergibt, aber stattdessen erhalte ich den Fehler .Scala-Futures und Await.result()
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
def randomFunction1(): Future[String] = {
Future.successful("string one")
}
def randomFunction2(): Future[String] = {
Future.successful("string two")
}
val asyncResult: Future[String] = for {
r1 <- randomFunction1()
r2 <- randomFunction2()
} yield r2
val syncResult: String = Await.result(
asyncResult,
1.second
)
Ich bekomme ähnliche Ergebnisse mit den folgenden.
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
def randomFunction1(): Future[String] = {
Future.successful("string one")
}
def randomFunction2(): Future[String] = {
Future.successful("string two")
}
val asyncResult: Future[String] = randomFunction1().flatMap(
r1 => {
randomFunction2()
}
)
val syncResult: String = Await.result(
asyncResult,
1.second
)
ich die Scala 2.12.2 Interpreter mit diesem :paste
mit laufen.
Was ist falsch an meinem Code?
Ihr 'Await()' ist aufgrund der REPL-Umgebung abgelaufen. Es wird ohne Fehler ausgeführt, wenn es aus einer Datei oder aus einem IntelliJ-Arbeitsblatt kompiliert wird. – jwvh
@jwvh für mich funktionieren beide Beispiele wie erwartet in REPL. David könnten Sie die vollständige Ausnahme, d. H. Mit Call-Stack? –
Wenn Sie den 'Await.result' Block durch' asyncResult onComplete ersetzen { Fall Erfolg (a) => Drucken (a) Fall Fehler (err) => drucken ("fehlgeschlagen") } dann sollte es funktionieren. Scheint wie ein Problem mit 'Await.result' – daniely