有没有办法删除包含在匿名函数中的传入的命名回调函数中的侦听器?
更新。下面有更完整的代码示例。
以下是详细信息。 我有一个在命名回调中传递的函数。
之前
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);
});
};
然而,这导致事件侦听器没有被删除,并且它们只是堆积起来,直到程序与太多的侦听器崩溃。
谢谢。
答案 0 :(得分:2)
问题可能不在你认为的地方。你提供的信息我希望你每次都可以调用read方法,这就是tomanylisteners到位的地方,因为你每次都会附加一个新的'data'监听器。如果你将'on'更改为'once',你的应用程序就不会再崩溃了:
stdin.once('data'...
这当然不是你问题的解决方案,它只是说明你的问题所在(它不是修剪/ tolowercase。
如果您显示更多的代码可能我们能够更好地帮助您,但可能您的读取方法只是不必要的开销......