再帰を使用すると、コードはかなりクリーンになります。 http応答が返されるのを待ってから、次の試行を開始します。これは、すべてのバージョンのノードで機能します。
var urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];
var processItems = function(x){
if( x < urls.length ) {
http.get(urls[x], function(res) {
// add some code here to process the response
processItems(x+1);
});
}
};
processItems(0);
promiseを使用したソリューションもうまく機能し、より簡潔になります。たとえば、約束を返すgetのバージョン がある場合 Node v7.6 +では、この例のように、いくつかの新しいJS機能を使用するasync/await関数を作成できます。
const urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];
async function processItems(urls){
for(const url of urls) {
const response = await promisifiedHttpGet(url);
// add some code here to process the response.
}
};
processItems(urls);
注:これらの例はどちらもエラー処理をスキップしますが、おそらく本番アプリでそれを行う必要があります。