Ich versuche, Futures in Scala zu ketten, aber es gibt mir den falschen Rückgabetyp.Chain Scala Futures Rückgabetyp
Ich habe die folgenden Methoden:
def getOneRecordByModel(x:DirectFlight): Future[Option[FlightByDetailModel]] = {
select.allowFiltering().where(_.from eqs x.from).and(_.to eqs x.to).and(_.departure eqs x.departure).and(_.arrival eqs x.arrival).and(_.carrier eqs x.airline).and(_.code eqs x.flightCode).one()
}
def getRecordByUUID(x:FlightByDetailModel): Future[Option[FlightByUUIDModel]] = {
select.allowFiltering().where(_.uuid eqs x.uuid).one()
}
def getUUIDRecordByModel(x:DirectFlight): Future[Option[FlightByUUIDModel]] = {
getOneRecordByModel(x) andThen {
case Success(Some(flight)) => getRecordByUUID(flight)
case Success(x) => Success(x)
case Failure(x) => Failure(x)
}
}
Aber jetzt bekomme ich die Fehlermeldung, dass die getUUIDRecordByModel
Rückgabetyp ist Future[Option[FlightByDetailModel]]
Wie verketten ich sie richtig?
Wenn Sie And verwenden, dann ändern Sie den Rückgabetyp nicht. Sie möchten FlatMap oder Map abhängig vom Rückgabetyp der anderen Methode. – monkjack
Der 'andThen'-Kombinator ist ausschließlich zum Nebeneffekt gedacht. Es gibt immer die "Zukunft", an der es aufgerufen wird, unverändert zurück. Wie von den anderen erwähnt, sollten 'map' und/oder' flatMap' genau das sein, wonach Sie suchen. – cmbaxter