免責事項: 以下のコード スニペットは、進行中の Coursera コースの 1 つに関連しています。学習目的でのみ投稿され、宿題の解決策として提出するために使用されるべきではないと考えてみましょう.
以下のコメントにあるように、Future のリストをリストの単一の Future に変換する必要があります。それ以上に、入力先物の少なくとも 1 つが失敗した場合、結果の Future は失敗するはずです。
次の実装に出会いましたが、完全には理解できません。
/** Given a list of futures `fs`, returns the future holding the list of values of all the futures from `fs`.
* The returned future is completed only once all of the futures in `fs` have been completed.
* The values in the list are in the same order as corresponding futures `fs`.
* If any of the futures `fs` fails, the resulting future also fails.
*/
def all[T](fs: List[Future[T]]): Future[List[T]] =
fs.foldRight(Future(Nil:List[T]))((f, fs2) =>
for {
x <- f
xs <- fs2
} yield (x::xs))
特に、次のことがわかりません。
- 変容はどこで
Future[T] -> T
起こる?xs <- fs2
それは私たちが最初に触れる唯一の場所のように見えFutures
、各xs
タイプはそうあるべきですFuture[T]
(しかし、どういうわけかそれはただになりますT
)。 - 障害はどのように処理されますか?
Future
入力の 1 つが失敗すると、結果のオブジェクトが失敗するように見えFutures
ます。