【问题标题】:MaxListenersExceededWarning occurs when promise.all is used in while loopMaxListenersExceededWarning 在 while 循环中使用 promise.all 时发生
【发布时间】:2019-10-17 16:46:40
【问题描述】:

我在 while 循环中使用了 Promise。当执行了大约 50 个 promise 时,MaxListenersExceededWarning 警告开始发出警报。所以我想知道EventEmitter和Promise之间有什么关系。以及如何修复我的代码以避免此警告。

我尝试减少 contentList 中的项目数。当数字低于 50 时,没有警告。但是当数字超过五十时,它开始警告。

async (req, res, next) => {
    let repository = new ContentRep();

    let contentList = (await repository.getContentList({category: 'allContent'})).contentList;

    while (contentList.length > 0) {
        let taskSize = contentList.length > 5 ? 5 : contentList.length;
        let subList = contentList.slice(0, taskSize);
        contentList = contentList.slice(taskSize, contentList.length);
        let contentPromises = [];

        subList.forEach(row => {
            contentPromises.push(new Promise(resolve => {
                repository.getTemplateInfo(row.category, row.content)
                    .then(templateInfo => {
                        resolve(templateInfo);
                    });
            }));

        })

        await Promise.all(contentPromises);
    }
    return contentList;
}

错误代码

(node:63176) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit

【问题讨论】:

标签: node.js es6-promise


【解决方案1】:

此警告通常由于内存泄漏和内部错误而发生。 增加您可以注册的最大事件限制将消除警告

将此代码添加到您的主文件中

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

【讨论】:

  • 这隐藏了问题而不修复真正的问题。
猜你喜欢
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 2021-07-18
  • 2022-01-10
  • 2018-08-29
相关资源
最近更新 更多