【问题标题】:nodejs request memory leak error when submitting multiple requestsnodejs在提交多个请求时请求内存泄漏错误
【发布时间】:2014-05-14 23:37:32
【问题描述】:

所以让我描述一下我在这里解决的问题。我需要遍历一个数组并为数组中的每个项目触发一个 http GET 请求。正如您在下面看到的,我正在迭代 list,在每次迭代时构造 url 并触发请求。

现在我知道请求使这些调用异步,但必须有一种方法来减慢循环速度。我试过 setTimeout 但这似乎并没有影响它。我在数组中有大约 350 个项目,需要 350 多个请求。我是手工完成的,但需要自动化。

_.each(list, function (item) {
  var url = 'https://google.com/search?tbm=nws&q='+query+" "+item;

  request(url, function (err, resp, body) {
    if (err) throw err;

    var
      dom = cheerio.load(body),
      headlines = [];

    dom('.r').each(function () {
      var headline = dom(this).text();

      if (headlines.join(' ').length < 450) {
        headlines.push(headline);
      }
    });

    q.resolve(headlines.join(' '));
  });
});

错误

(node) 警告:检测到可能的 EventEmitter 内存泄漏。增加了 11 位听众。使用发射器.setMaxListeners() 增加限制。

【问题讨论】:

  • 如果你想减慢它的速度,那么你不应该使用_.eachfor或任何一次迭代list的东西。你应该在一个函数中做一个,然后使用一个setTimeout,它通过增加一个i来执行下一个函数,可以调用相同的函数,它再次执行另一个setTimeout等等,直到i等于长度列表。
  • ...或者不使用setTimeout 并在前一个完成后执行下一个。如果需要,您也可以一次做几个。
  • 超时效果很好。谢谢。

标签: javascript node.js


【解决方案1】:

试试异步模块https://github.com/caolan/async:

你可以使用的代码是这样的:

var async = require("async");
var request = require("request");
var cheerio = require("cheerio");
async.forEachLimit(list,1,function(item,callback){
    var url = 'https://google.com/search?tbm=nws&q='+query+" "+item;
    request(url, function (err, resp, body) {
        if (err) throw err;

        var
           dom = cheerio.load(body),
           headlines = [];

        dom('.r').each(function () {
            var headline = dom(this).text();

            if (headlines.join(' ').length < 450) {
                headlines.push(headline);
            }

         });

         q.resolve(headlines.join(' '));

         callback();

      });

 },function(err){
  if(err)console.log(err);return;
});

不需要 setTimeout 这非常适合异步调用 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2022-11-03
    • 2018-01-11
    • 2012-04-24
    • 2014-06-20
    相关资源
    最近更新 更多