我使用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();
};

那么如何检查i allready setuncaughtException事件?

最佳答案

由于process是一个EventEmitterdocs),您可以使用process.listeners('uncaughtException')检索已连接的侦听器数组(因此.length可以查看绑定了多少个)。
如果需要,还可以使用process.removeAllListeners('uncaughtException')删除已绑定的侦听器(docs)。

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;
            }
        );
    }
};

还要注意,您看到的只是一个警告;添加尽可能多的侦听器没有问题。

10-04 15:32