3

我用process.on "uncaughtException". 有时我会多次调用它,因为不是微不足道的模块系统。所以我收到警告:

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

我的代码:

var onError = function (){
    if (true) // how to check if I allready set uncaughtException event?
    {
        process.on ("uncaughtException", function  (err) {
            console.log ("uncaughtException");
            throw err;
            } 
        );
    }
};

为了模拟几个调用,我使用循环:

var n = 12;
for (var i = n - 1; i >= 0; i--) {
    onError();
};

那么如何检查我是否已经设置了uncaughtException事件?

4

1 回答 1

6

processdocs)一样,您可以使用它来检索已附加的侦听器数组(因此EventEmitter可以查看您绑定了多少)。process.listeners('uncaughtException').length

如果需要,您还可以使用process.removeAllListeners('uncaughtException')删除已绑定的侦听器(文档)。

var onError = function (){
    if (process.listeners('uncaughtException').length == 0) // how to check if I allready set uncaughtException event?
    {
        process.on ("uncaughtException", function  (err) {
            console.log ("uncaughtException");
            throw err;
            } 
        );
    }
};

另请注意,您所看到的只是一个警告;添加尽可能多的听众没有问题。

于 2013-07-27T12:39:46.973 回答