1

有没有办法删除包含在匿名函数中的传入命名回调函数的侦听器?

更新。更完整的代码示例如下。

这是详细信息。我有一个在命名回调中传递的函数。

function read (message, named_callback ) {

    var named_callback  = named_callback || default_callback
       , message        = message || "Choose: ";

    stdout.write(message);
    stdin.resume();
    stdin.setEncoding('utf8');
    stdin.on('data', named_callback);
    });
};

所有的人都named_callback接受并准备一个传入的用户输入(答案)。

answer =  answer.trim().toLowerCase(); 

我最终到处重复修剪和小写行!我想把这一步移到一个地方,所以试图在它被传递到回调之前准备答案。我写了这个:

function read (message, named_callback ) {

    var named_callback  = named_callback || default_callback
       , message        = message || "Choose: ";

    stdout.write(message);
    stdin.resume();
    stdin.setEncoding('utf8');
    stdin.on('data', function (answer) {
        answer =  answer.trim().toLowerCase();
        named_callback(answer);
    });
};

但是,这会导致事件侦听器没有被删除,它们只会堆积起来,直到程序因太多侦听器而崩溃。

谢谢你。

4

1 回答 1

2

问题可能不在您认为的位置。根据您提供的信息,我希望您每次都调用 read 方法,这就是 tomanylisteners 的位置,因为您每次都附加一个新的“数据”侦听器。如果您将“on”更改为“once”,您的应用程序不应再崩溃:

stdin.once('data'...

这当然不是您问题的解决方案,它只是为了说明您的问题在哪里(它不是修剪/小写字母。

如果您显示更多代码,也许我们能够更好地帮助您,但您的读取方法可能只是不必要的开销......

于 2013-05-22T05:54:09.587 回答