私は Scala を学ぼうとしていて、楽しい時間を過ごしていますが、この古典的な問題に直面しています。NodeJS の初期のネストされたコールバック地獄の多くを思い出します。
疑似コードでの私のプログラムは次のとおりです。
- S3 バケットのリストを取得するタスク。
- タスク 1 が完了したら、バケットの処理を 10 個のグループにまとめたいと考えています。
- 各バッチについて:
- すべてのバケットのリージョンを取得します。
- リージョンにないバケットを除外します。
- 各バケット内のすべてのオブジェクトを一覧表示します。
- すべてを印刷する
ある時点で、次のタイプに行き着きます。Task[Iterator[Task[List[Bucket]]]]
基本的に:
外側のタスクは、すべての S3 バケットを一覧表示する最初のステップであり、内側の Iterator/Task/List は、リストを返すタスクをバッチ処理しようとしています。
に到達するために外側のタスクを削除/平坦化する方法があることを願っていIterator[Task[List[Bucket]]]
ます。
処理をステップに分解しようとすると、ネストが深いため、ネストされたマップが多数作成されます。これは正しいことですか、それともこのネスティングを処理するためのより良い方法はありますか?