【发布时间】: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