【发布时间】: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() 增加限制。
【问题讨论】:
-
如果你想减慢它的速度,那么你不应该使用
_.each或for或任何一次迭代list的东西。你应该在一个函数中做一个,然后使用一个setTimeout,它通过增加一个i来执行下一个函数,可以调用相同的函数,它再次执行另一个setTimeout等等,直到i等于长度列表。 -
...或者不使用
setTimeout并在前一个完成后执行下一个。如果需要,您也可以一次做几个。 -
超时效果很好。谢谢。
标签: javascript node.js