babelの助けを借りて ES6 ジェネレーターを試していますが、コールバック ベースの非同期関数を効果的に使用してイテレーターを出力する方法 (またはその場合) を理解するのに苦労しています。
いくつかの URL を受け取り、それらを非同期にダウンロードし、ダウンロードしたらすぐに返す関数を書きたいとしましょう。以下のような文章が書けるようになりたいです。
let urls = ['http://www.google.com', 'http://www.stackoverflow.com' ];
for ( {url, data} of downloadUrls(urls) ) {
console.log("Content of url", url, "is");
console.log(data);
}
どうすれば実装できdownloadUrls
ますか? 理想的には、次のように記述できるようになりたいと考えています。
var downloadUrls = function*(urls) {
for( let url of urls ) {
$.ajax(url).done( function(data) {
yield data;
});
}
};
「yield」はコールバック内で呼び出され、ジェネレーター内で直接呼び出されないため、これはもちろん機能しません。同じことを試みている人々の多くの例をオンラインで見つけることができます。それらはあまり透明ではありません)、ブラウザ/ノードフラグを有効にする必要があるか、ノード固有の機能/ライブラリを使用しています。必要なものに最も近いライブラリはtask.jsのようですが、現在の Chrome で最も単純な例を実行することさえできません。
標準機能と現在の機能を使用して意図した動作を取得する方法はありasync/await
ますか?