10

助けを求めています。私はNodejsを初めて使用し、このカスタムイベントエミッターを削除することが可能かどうか疑問に思っています。このコードのほとんどは、PedroTeixeiraによるHandonnodejsからのものです。一番下の私の関数は、本で設定したカスタムイベントエミッターを削除しようとしています。

var util = require('util');
var EventEmitter = require('events').EventEmitter;

// Pseudo-class named ticker that will self emit every 1 second.
var Ticker = function()
{
    var self = this;
    setInterval(function()
    {
        self.emit('tick');
    }, 1000);   
};

// Bind the new EventEmitter to the sudo class.
util.inherits(Ticker, EventEmitter);

// call and instance of the ticker class to get the first
// event started. Then let the event emitter run the infinante loop.
var ticker = new Ticker();
ticker.on('tick', function()
{
    console.log('Tick');
});

(function tock()
{
    setInterval(function()
    {
        console.log('Tock');
        EventEmitter.removeListener('Ticker',function()
            {
                console.log("Clocks Dead!");
            });
    }, 5000);
})();
4

2 に答える 2

10

EventEmitter ではなく、ticker オブジェクトの removeListener メソッドを使用する必要があります。最初の引数はイベント名、2 番目の引数は削除するイベント リスナーへのリンクです。

このコードは動作するはずです:

var util = require('util');
var EventEmitter = require('events').EventEmitter;

// Pseudo-class named ticker that will self emit every 1 second.
var Ticker = function()
{
    var self = this;
    setInterval(function()
    {
        self.emit('tick');
    }, 1000);   
};

// Bind the new EventEmitter to the sudo class.
util.inherits(Ticker, EventEmitter);

// call and instance of the ticker class to get the first
// event started. Then let the event emitter run the infinante loop.
var ticker = new Ticker();
var tickListener = function() {
    console.log('Tick');
};
ticker.on('tick', tickListener);

(function tock()
{
    setTimeout(function()
    {
        console.log('Tock');
        ticker.removeListener('tick', tickListener);
        console.log("Clocks Dead!");
    }, 5000);
})();
于 2012-04-16T03:32:14.333 に答える