(node) warning: possible EventEmitter memory leak detected

今天项目中遇到个问题:
在页面点击悬浮分享按钮时,有时候响应事件,有时候不可以,一开始我还怀疑我画布绘制问题导致按钮不可用,然而,注掉代码后,问题依旧时有时无,与canvas并无干系。

开启调试,我发现控制台有报错信息:

(node) warning: possible EventEmitter memory leak detected. 16 listeners added. Use emitter.setMaxListeners() to increase limit.

从报错信息来看,应该是说事件注册器达到上限导致内存泄露,需要调用 emitter.setMaxListeners( ) 方法增加上限。

因为对于Node.js并不熟悉,随手google一下关键词EventEmitter,这篇文章 微信小程序 Node.js (基础四) 事件循环& (基础五) EventEmitter 介绍的挺细致的,感谢作者的分享,帮助我更好的理解Node.js里的事件处理和循环。

作者在 微信小程序 Node.js (基础四) 事件循环& (基础五) EventEmitter 一文提到:
setMaxListeners(n) 默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。

而且在我的报错信息里有提到,我需要增加监听事件的默认限制,所以我在出错的页面js文件中增加里如下代码:

onShow: function () {
    const emitter = EventEmitter()//获取eventEmitter对象
    emitter.setMaxListeners(100)//指定一个最大监听数量
    //emitter.setMaxListeners(0)//或者关闭最大监听阈值
}

当然,也可以全局修改监听数,也就是在app.js中去处理。我目前只在当前页面遇到这个报错和问题,所以就简单的在该页面局部处理,也许下次再出现此问题,我就该考虑在app.js全局处理了~

你可能感兴趣的:((node) warning: possible EventEmitter memory leak detected)