Alaska Alaska - 4 months ago 46
Javascript Question

Use EventEmitter in ES6 class

I am trying to get the EventEmitter in my own class running in ES6:

"use strict";
const EventEmitter = require('events');

class Client extends EventEmitter{

constructor(token, client_id, client_secret, redirect_uri, code){
super();
this.token = token;
this.client_id = client_id;
this.client_secret = client_secret;
this.redirect_uri = redirect_uri;
this.code = code;
}

eventTest(){
this.emit("event");
console.log(this.token);
}
}

let testClient = new Client(1,2,3,4,5);

testClient.eventTest();
testClient.on('event', () => {console.log('triggerd!')} );


but the event is doing nothing ^^

Without ES6 i got it working with this code:

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

var Client = function(credentials) {
var self = this;

function eventTest() {
self.emit('event');
}
};

util.inherits(Client, EventEmitter);


Does someone know how to do it right in ES6?

Answer

Events are synchronous - you're firing it before you are listening. Use

const testClient = new Client(1,2,3,4,5);
testClient.on('event', () => {console.log('triggered!')} );
testClient.eventTest();