今天项目中遇到个问题:
在页面点击悬浮分享按钮时,有时候响应事件,有时候不可以,一开始我还怀疑我画布绘制问题导致按钮不可用,然而,注掉代码后,问题依旧时有时无,与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全局处理了~