次の問題を修正しようとしています。
Future[Map[A, B]] があります。すべての B に対して、B を Future[C] に変換するメソッドを適用する必要があり、Future[Map[A, C]] を返したい
これが私がこれまでに持っているコードです:
def getClients(clientIds: Seq[Int]): Future[Map[Int, ClientData]] = {
def getClientData(clientInfo: ClientInfo): Future[ClientData] =
clientInfo match {
case ValidInfo(info) => getData(info)
case _ => throw new Exception
}
client.getClients(clientIds) map {
_.toMap map {
case (clientId: Int, clientInfo: ClientInfo) =>
getClientData(clientInfo) map {
clientData => (clientId, clientData)
}
}
}
}
Iterable[Future[(Int, ClientData)]] を返すため、このコードは間違っています。
参考までに、getClientsは、Map が変更可能なFuture[Map[A, B]]を返す倹約メソッドであるため、最初に toMap を使用して不変のマップに変換する必要があります。
よろしくお願いします。