Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Async.eachSeries给了我一个rangeerror:超出了最大调用堆栈_Node.js_Async.js - Fatal编程技术网

Node.js Async.eachSeries给了我一个rangeerror:超出了最大调用堆栈

Node.js Async.eachSeries给了我一个rangeerror:超出了最大调用堆栈,node.js,async.js,Node.js,Async.js,我想在一个集合中迭代4435个产品。对于每个产品,我都想下载图片并将其上传到AmazonS3存储桶中。在最后一部分中,我编写了一个运行良好的函数 但是在750 products node.js崩溃后,没有给我一个错误。使用>output.log&函数,我得到一个 'RangeError:超过最大调用堆栈大小' 我使用async.eachSeries对产品和产品图像进行迭代。这是将在所有产品上循环的完整功能。正如你所看到的,我在“柜台”上发表了评论,但这还不够。谁能告诉我我做错了什么 module

我想在一个集合中迭代4435个产品。对于每个产品,我都想下载图片并将其上传到AmazonS3存储桶中。在最后一部分中,我编写了一个运行良好的函数

但是在750 products node.js崩溃后,没有给我一个错误。使用
>output.log&
函数,我得到一个

'RangeError:超过最大调用堆栈大小'

我使用
async.eachSeries
对产品和产品图像进行迭代。这是将在所有产品上循环的完整功能。正如你所看到的,我在“柜台”上发表了评论,但这还不够。谁能告诉我我做错了什么

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");
} 
为了帮助你, 只要放一个:

//counter++;
console.log("next");
// to avoid Maximum call stack size exceeded error
setImmediate(()=>{
 callback();
});
为了帮助你, 只要放一个:

//counter++;
console.log("next");
// to avoid Maximum call stack size exceeded error
setImmediate(()=>{
 callback();
});

看,也许,你忘记了if(image.src)的else中的一个cb()。看,也许,你忘记了if(image.src)的else中的一个cb()。这个答案确实解决了这个问题,但是你能详细说明一下为什么这个答案解决了这个问题/这个答案确实解决了这个问题,导致了什么原始问题,但是你能详细说明一下为什么这样解决问题/最初的问题是由什么引起的吗