在ES6类中使用EventEmitter

我正在尝试在ES6中运行我自己的类中的EventEmitter:

"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吗?

事件是同步的 – 你在听之前就开始了。 使用

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

你可以使用process.nextTick()来让你的代码asynchronous。 之后一切都会按预期工作。 这是来自节点文档的注释:

process.nextTick()方法将callback添加到“下一个打勾队列”中。 一旦事件循环的当前轮到运行完成,当前在下一个滴答队列中的所有callback将被调用。

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