2016-07-09 6 views
11

Ich versuche, die EventEmitter in meiner eigenen Klasse läuft in ES6 zu bekommen:Verwenden EventEmitter in ES6 Klasse

"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!')}); 

aber das Ereignis nichts tut ^^

Ohne ES6 ich es mit dieser Arbeit bekam 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); 

Weiß jemand, wie man es in ES6 richtig macht?

+1

Sollte es nicht sein 'const EventEmitter = erfordern ('Events') EventEmitter;.'? –

+1

[hier ist ein paar gute Beispiele] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9), oder speziell [dieser] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9#file-pseudo- classical-es6-js) – nem035

+1

@ nem035 Ich habe die Kollektion schon gefunden, aber ich habe nicht verstanden, wie man ein Event macht. Die Beispiele zeigen nur, wie man eine Funktion innerhalb einer Klasse erstellt:/ – Alaska

Antwort

13

Ereignisse sind synchron - Sie zünden es, bevor Sie zuhören. Verwenden Sie

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

Vielen Dank! Das ist so ein dummer Fehler. – Alaska

+0

@Alaska Das Auftreten von Ereignissen ist normalerweise nicht deterministisch und somit asynchron, es sei denn, Ihr Code gibt sie selbst aus. Also würde ich es keinen dummen Fehler nennen: D – ftor

0

Sie könnten process.nextTick() Sie verwenden, um Code asynchron zu machen. Danach wird alles wie erwartet funktionieren. Dies ist der Hinweis in der Node-Dokumentation:

Die Methode process.nextTick() fügt den Rückruf zur "nächsten Tick-Warteschlange" hinzu. Sobald der aktuelle Turn der Event-Loop-Schleife abgeschlossen ist, werden alle Callbacks aufgerufen, die sich momentan in der nächsten Tick-Warteschlange befinden.

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