![](/img/trans.png)
[英]Promise.all() throwing error while connecting to database Error: timeout exceeded when used with Node-Postgres
[英]MaxListenersExceededWarning occurs when promise.all is used in while loop
我在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
由於內存泄漏和內部錯誤,通常會發生此警告。 增加可以注冊的最大事件限制將刪除警告
將此代碼添加到主文件中
require('events').EventEmitter.prototype._maxListeners = 100;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.