Node.js因内存使用而杀死应用程序

时间:2015-08-30 04:56:47

标签: node.js

我有简单的应用

它的for循环通过请求rest api然后转到另一个for循环并请求。

类似的东西:

var request = require('request');

for(var j=1;j<=10;j++){

            request({
              method: 'GET',
              url: 'https://api.domain.com/items/?page='+j+'&limit=1000',
              headers: {
                'Content-Type': 'application/json'
              }}, function (error, response, body) {

              var data = JSON.parse(body)


              for(var i=0;i<data.length;i++){

                    request({
                      method: 'GET',
                      url: 'https://api.domain.com/itemDetail/'+data[i].id,
                      headers: {
                        'Content-Type': 'application/json',
                      }}, function (error, response, body) {


                        var itemDetails = JSON.parse(body);

                        // save items to mongodb          

                        }

              }
    });

}

我有超过200,000个数据需要保存,当我循环浏览10页(将第一个循环限制设置为10)时,确定但是当我在第一个循环节点中增加页码时内存使用量变高并杀死应用程序。

我想知道这种情况发生的原因以及如何解决这个问题。

提前致谢

1 个答案:

答案 0 :(得分:1)

如果您要触发200'000项目进行保存,循环循环意味着您将要求您的javascript应用程序继续等待数千个回调返回并完成。这不会起作用,请记住javascript(以及nodejs)是单线程的。

您应该使用asyncq等库来实现此例程,这样可以控制迭代周期,使其保持在可接受的内存限制范围内。