Ich habe ein Problem in Scala, wenn ich versuche, ein Ergebnis von einer Methode zurückzugeben.Future Any entspricht nicht Future E
Ich verwende Play 2.6 und ReactiveMongo.
Fehler in den Bildern unten:
jemand einige Hinweise geben könnte?
Ich habe ein Problem in Scala, wenn ich versuche, ein Ergebnis von einer Methode zurückzugeben.Future Any entspricht nicht Future E
Ich verwende Play 2.6 und ReactiveMongo.
Fehler in den Bildern unten:
jemand einige Hinweise geben könnte?
Future.map Methode ist die Annahme einer Funktion der Future
's Ergebnis, so für Ihren Code, es ist Mapping result
' abzubilden s Future
Ergebnis gleich:
result.map(writeResult: WriteResult => {
case Success => entity
case Failure(f) => f.printStackTrace()
})
Wie dem obigen Code, Sie sind versuchen, WriteResult
und Unit
zurückgeben, so ist der map
Ergebnistyp Any
, und geben Future[Any]
Typ zurück. Also der Typ Mismatch Compile Fehler geworfen.
Eigentlich brauchen Sie: result.map(writeResult: WriteResult => entity)
. und Sie können aufrufen create
Methode wie:
val res = create(entity)
res.onComplete {
case Success(e) => println(e)
case Failure(f) => f.printStackTrace()
}
Ich vermute, dass das, was Sie wirklich wollen, ist Future.transform
statt map
. So etwas wie das
val result: Future[WriteResult] = ???
result.transform(_ => entity,
e => {
e.printStackTrace()
e // or return here your custom wrapper exception
})
Die zukünftige Zusammensetzung des Codes ist nicht wirklich gut strukturiert, eher für Verständnis und überprüfen Sie Ihre Arten. – cchantep
@cchanstep ja, es ist nicht klar, ich denke daran, zum Verständnis zu verwenden, aber ich bin noch nicht sehr geschickt in Scala. und weißt du, was mein Problem verursacht? –
Schlechte Zusammensetzung ist anfällig für Typfehler, speziell "result.map", die ansonsten eine "Einheit" von "printStackTrace" und eine "Entität: E" ergeben, so dass nur "Any" in diesen Fällen kohärent ist. – cchantep