簡體   English   中英

在while循環中使用promise.all時發生MaxListenersExceededWarning

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM