
4.3
async/await
99
function done(err, result) {
// ...
}
links.forEach(function(link) {
downloadQueue.pushTask(function *() {
yield spider(link, nesting - 1);
done();
});
});
}
}
各タスクにおいて、
done()
をダウンロード完了の直後に起動していますので、ダウンロードされる
リンク数を数えることができ、すべてが完了したときにサンクのコールバックに知らせることができま
す。
練習として、この小節の最初に示したほかの
4
つの方法で、バージョン
4
のウェブスパイダーを実装
してみてください。
4.3
async/await
コールバック、プロミス、ジェネレータは
JavaScript
および
Node
で非同期のコードを扱う際の武器
となります。既に見たとおりジェネレータはとても興味深いものです。関数の実行を停止後に再開する
ことを可能にしてくれます。この機能を使って、非同期のコードを書くことで、次の文を続けて実行す
る前に、結果を待ち、非同期の操作に対してブロックするように「見える」関数を書くことができます。
問題はジェネレータ関数はイテレータを扱うように主に設計されているという点で、非同期のコード
を扱う場合には少し複雑になります。理解や保守が難しくなる危険性があります。
しかし希望があります。
ES2017
で導入された
async
と
await
の導入に ...