Nick
Nick

Reputation: 19664

Subclassing events.EventEmitter not working

How do I subclass EventEmitter? I am trying the following test:

 var util = require('util')
   ,events = require('events');

function Downloader() {

    events.EventEmitter.call(this);
}
util.inherits(Downloader, events.EventEmitter);
console.log(new Downloader() instanceof events.EventEmitter); // true
Downloader.prototype.download = function(episode) {
    var self = this;

    var statusMessage = 'Downloading: ' + episode;
    self.emit('status', statusMessage);    

    setTimeout(function() {
        var finishedMessage = 'Downloaded ' + episode;
        self.emit('finished', finishedMessage);
    }, 5000);    
}

exports.Downloader = new Downloader();

Node complains 'object' has no method 'on'. However when check the Downloader instanceOf EventEmitter is returns true.

Can someone explain? Thanks!

Upvotes: 2

Views: 1673

Answers (1)

Nick
Nick

Reputation: 19664

Oh geez. First of all it should be 'module.exports'. Secondly its 'instanceof' not 'instanceOf'.

My bad. Here's a working example

var util = require('util')
   ,events = require('events');

function Downloader() {

    events.EventEmitter.call(this);
}
util.inherits(Downloader, events.EventEmitter);

Downloader.prototype.download = function(episode) {
    var self = this;

    var statusMessage = 'Downloading: ' + episode;
    self.emit('status', statusMessage);    

    setTimeout(function() {
        var finishedMessage = 'Downloaded ' + episode;
        self.emit('finished', finishedMessage);
    }, 5000);    
}

module.exports = new Downloader();

Upvotes: 3

Related Questions