Подтвердить что ты не робот

Использовать EventEmitter в классе ES6

Я пытаюсь получить EventEmitter в своем классе, запущенном в 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!')} );

но событие ничего не делает ^^

Без ES6 я получил работу с этим кодом:

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);

Кто-нибудь знает, как это сделать в ES6?

4b9b3361

Ответ 1

События синхронны - вы стреляете в него, прежде чем слушаете. Используйте

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

Ответ 2

Вы можете использовать process.nextTick(), чтобы сделать код асинхронным. Впоследствии все будет работать так, как ожидалось. Это примечание из документации node:

Метод process.nextTick() добавляет обратный вызов к "следующей очереди тика". Как только текущий поворот цикла цикла выполнения завершится, все вызовы, вызываемые в настоящее время в следующей очереди тика, будут вызваны.

eventTest(){
    process.nextTick(() => {
        this.emit("event");
    });
    console.log(this.token);
}