我已经阅读了此错误并知道了它的含义,并且还知道如何通过将var x = JsonConvert.DeserializeObject<DTO>(result[0]);
设置为var y = JsonConvert.DeserializeObject<IEnumerable<DTO>>(Newtonsoft.Json.JsonConvert.SerializeObject(result.ToArray()));
来禁用它。但是我想知道是什么原因造成的,所以我可以正确地处理它。
因此,基本上,这里是一个用于检查我的帐户是否有新消息的机器人,我需要一次检查很多帐户,因此我编写了此机器人来做到这一点。我在这段代码中有4个功能。
MaxListeners
我有时会在console.logs之间出现此错误
0
我不确定是什么原因引起的,还是很严重?
答案 0 :(得分:1)
通常在调用太多异步函数而未完成时发生。并且鉴于所有异步函数都具有min timeout(0ms),因此它们总是被压入堆栈的末尾,并且在调用其中许多函数之前,它们都不会完成。
无论如何,如果您试图让大量异步事件并行发生,
通过将MaxListeners设置为0来禁用它
process.setMaxListeners(0);
或者,您可以使用for循环(而不是forEach),将其包装在带有await的异步函数中,以使您的代码完全同步。如果运行时没有对象,则可以使日志记录更好。
// example of de-parallelizing
(async () => {
const userIds = await myDb.getAllUserIds();
const usersWithoutFirstnames = [];
for (userId of userIds) {
console.log("Getting first name of user:", userId);
const firstName = await myDb.getFirstName(userId);
if (firstName) {
console.log("SUCCESS: ", firstName);
} else {
console.log("First name not found");
usersWithoutFirstnames.push(userId);
}
}
})(); // closures are back
答案 1 :(得分:0)
我认为问题与这些部分有关:
setInterval(function(){
if(!inprogress)
{
init();
}
}, 2000);
async function init(){
...
browser._process.once('close', () => {
console.log(' ------------------------ closed !');
inprogress = false;
});
browser.on('disconnected', () => {
console.log(' ------------------------ disconnecte !');
inprogress = false;
});
...
}
您每2秒触发两个事件侦听器(如果inprogress
等于false
),但是只有在进程遇到fatalerror
时才关闭这些侦听器。
if(check === 'fatalerror') {
await browser.close();
}
因此,按照您代码的逻辑,我认为大多数close
和disconnected
侦听器仍在侦听/等待事件发生,例如您收到的警告,您可能已经同时有11位听众。取决于返回值check
,您应该始终关闭browser
实例,我认为这两个事件侦听器都可以被使用并正确释放内存。