2016-07-09 31 views
11

Sto cercando di ottenere l'EventEmitter nella mia classe in esecuzione in ES6:Usa EventEmitter in classe 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!')}); 

ma l'evento non sta facendo niente ^^

Senza ES6 ho preso a lavorare con questo codice:

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

Qualcuno sa come farlo correttamente in ES6?

+1

non dovrebbe essere 'const EventEmitter = richiedere ('eventi') EventEmitter;.'? –

+1

[ecco alcuni esempi validi] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9) o in particolare [questo] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9#file-pseudo- classic-es6-js) – nem035

+1

@ nem035 Ho già trovato la collezione, ma non ho capito come creare un evento. Gli esempi mostrano solo come creare una funzione all'interno di una classe:/ – Alaska

risposta

13

Gli eventi sono sincroni: lo stai attivando prima di ascoltare. Utilizzare

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

Grazie mille! Questo è un errore stupido. – Alaska

+0

@Alaska L'occorrenza degli eventi è solitamente non deterministica e quindi asincrona, a meno che il codice non li emetta da sé. Quindi non lo definirei un errore stupido: D – ftor

0

È possibile utilizzare process.nextTick() per rendere il codice asincrono. Successivamente tutto funzionerà come previsto. Questa è la nota dalla documentazione del nodo:

Il metodo process.nextTick() aggiunge la richiamata alla "coda di tick successiva". Una volta che il turno corrente del ciclo di eventi gira fino al completamento, verranno richiamati tutti i callback attualmente nella coda dei tick successiva.

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