Je veux parcourir plus de 4435 produits dans une collection. Pour chaque produit, je souhaite télécharger l'image et la télécharger dans un compartiment Amazon S3. Pour la dernière partie, j'ai écrit une fonction qui fonctionne bien.Async.eachSeries me donne un rangeerror: pile d'appel maximale dépassée
Mais après un produit de 750 produits node.js se bloque sans me donner d'erreur. Avec la fonction > output.log &
je reçois un
'RangeError: Maximum call stack size exceeded'
I à l'aide async.eachSeries
itérer sur les produits et les images du produit. C'est la fonction complète qui va parcourir tous les produits. Comme vous pouvez le voir, je commente le 'compteur', mais ce n'est pas suffisant. Quelqu'un peut-il me dire ce que je fais mal?
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");
}
voir https://stackoverflow.com/questions/6095530/maximum-call-stack-size-exceeded-error – Plaute
Peut-être, vous oublier un cb() dans else of if (image.src) – Plaute