
4.1
プロミス
83
return Promise.resolve();
}
const links = utilities.getPageLinks(currentUrl, body);
const promises = links.map(link => spider(link, nesting - 1));
return Promise.all(promises);
}
ここでは
map()
メソッドを使ってリンクの配列をプロミスの配列に変換しています。先のコードとは
違い、前のリンクのダウンロード完了を待たなくてもよいので、プロミスをチェーンする必要はありま
せん。最後に
Promise.all()
を使ってプロミスオブジェクトを生成しています。このオブジェクトは
すべてのリンクのダウンロードが完了した時点で
fulfill
されます。まさに我々の要求に合致しています。
4.1.6
同時実行数を制限した並行処理パターン
残念ながら、
ES2015
のプロミスの
API
には同時実行数を制限する機能はありません。しかし、前の
章で紹介したテクニックを使えます。前の章で実装した
TaskQueue
に変更を加えて、プロミスを返す
タスクを扱えるようにします。具体的には
next()
メソッドを次のように変更します(
04_promises_
limited_parallel_execution
)。
next() {
while(this.running < this.concurrency && this.queue.length) ...