コレクション内の4435以上の製品を繰り返したいと思います。すべての製品について、イメージをダウンロードしてAmazon S3バケットにアップロードします。最後の部分については、うまく機能している関数を書いています。Async.eachSeriesは私にrangeerrorを与えます:最大呼び出しスタックを超えました
しかし、750個の製品の後でnode.jsがクラッシュしてもエラーは表示されません。 > output.log &
機能で、私は、私は製品および製品の画像を反復するasync.eachSeries
を使用して
'RangeError: Maximum call stack size exceeded'
を取得します。これは、すべての製品をループする完全な関数です。あなたが見ることができるように、私は 'カウンター'をコメントアウトしますが、それだけでは不十分です。誰かが私が間違っていることを教えてもらえますか?あなたを助けるために
module.exports.putImagesToAmazon = function(req, res){
console.log("putImagesToAmazon");
var resultArray = [];
//var counter =0;
Product.find({}).sort({_id: -1}).exec(function(err, products){
console.log("aantal producten", products.length);
async.eachSeries(products, function(product, callback){
if(product.images.length > 0){
async.eachSeries(product.images, function(image, cb){
if(image.src){
if(image.src.indexOf("http://") !== -1 || image.src.indexOf("https://") !== -1){
upload.uploadStream(image.src, 'product-image', function(err, data){
if(err) {
console.log("ERROR1", err);
resultArray.push(err);
cb();
}else{
image.src = data;
product.save(function(err, result){
if (err) {
console.log("saving product error", err);
}else{
console.log("product updated", product.name);
}
})
cb();
}
})
}else{
cb();
}
}
}, function(){
//counter++;
console.log("next");
callback();
})
}
}, function(){
console.log("callback", counter);
var fields = ['statusCode', 'statusMessage', 'error', "url"];
var csv = json2csv({data: resultArray, fields: fields});
fs.writeFile('errors.csv', csv, function(err){
if (err) throw err;
console.log("saved");
})
})
})
res.send("Ok");
}
は、たぶん、あなたをhttps://stackoverflow.com/questions/6095530/maximum-call-stack-size-exceeded-error – Plaute
見ますif(image.src)else of cb()を忘れてください – Plaute