如何“emitter.setMaxListeners()”?

问题描述 投票:0回答:7

当我使用 node.js 'request' 模块对某个 URI 执行 GET 操作时;

var options = {uri:"aURI", headers:headerData};
request.get(options, function (error, response, body) {
}

错误信息是:

[Error: Exceeded maxRedirects. Probably stuck in a redirect loop.]

并且还有以下消息:

"(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit."

我该如何

setMaxListeners

node.js httprequest
7个回答
121
投票

我强烈建议不要使用该代码:

process.setMaxListeners(0);

这个警告并不是没有理由的。大多数时候,这是因为您的代码中隐藏着错误。删除限制会删除警告,但不会删除其原因,并防止您收到有关资源泄漏源的警告。

如果您出于正当原因达到了限制,请在函数中输入一个合理的值(默认值为 10)。

此外,要更改默认值,无需弄乱 EventEmitter 原型。您可以像这样设置 defaultMaxListeners 属性的值:

require('events').EventEmitter.defaultMaxListeners = 15;

34
投票

我使用代码来增加全局默认限制:


require('events').EventEmitter.prototype._maxListeners = 100;


7
投票

虽然可以向nodejs模块添加一些东西,但这似乎不是最好的方法(如果你尝试在其他计算机上运行你的代码,程序显然会因相同的错误而崩溃)。

我宁愿在你自己的代码中设置最大听众数量:

var options = {uri:headingUri, headers:headerData, maxRedirects:100};
request.setMaxListeners(0);
request.get(options, function (error, response, body) {
}

0
投票

尝试使用:

require('events').EventEmitter.defaultMaxListeners = Infinity; 

0
投票

2024年,要提高全球默认限额,您可以:

import { EventEmitter } from 'stream'
EventEmitter.defaultMaxListeners = 20

-4
投票

这是@Félix Brunet 的扩展answer

原因 - 您的应用程序中有代码隐藏

如何找到-

  • 删除/注释代码并执行,直到出现错误
  • 检查日志文件

例如 - 在我的例子中,我创建了 30 个 winston log 不知不觉地,它开始出现错误

注意:如果您抑制此错误,它会在 3..4 天后再次出现


-5
投票

我也遇到过这样的事

我使用这个代码并且它有效

require('events').EventEmitter.defaultMaxListeners = infinity;

尝试一下。可能有帮助

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.