CSV ファイルから URL を読み取り、それらが使用可能かどうかを確認し、不適切な URL を別のファイルに書き込もうとしています。劇的に遅くなる前に(1秒あたり5回のチェックから10秒ごとのチェックまで)約数千を通過し、おそらく適用していないため、「致命的なエラー:CALL_AND_RETRY_2割り当てに失敗しました-プロセスがメモリ不足です」というメッセージが表示されます送信ストリームに正しくバックプレッシャします。
var csv = require('csv');
var request = require('request');
var fs = require('fs');
csv()
.from(fs.createReadStream('./urls.csv'), {columns: true})
.to(fs.createWriteStream('./badurls.csv'))
.transform(function(data, index, callback){
checkImage(null,callback,data['main-image-url'],index)
});
function checkImage(err, callback, url, index) {
if (url != "") {
request.head(url, function(err, res) {
console.log(index,res.statusCode,url);
if (res.statusCode != 200) {
callback(null,url+"\n");
}
})
}
}