J'essaie de faire fonctionner EventEmitter dans ma propre classe dans 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!')} );
mais l'événement ne fait rien ^^
Sans ES6, je l'ai fait fonctionner avec ce 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);
Est-ce que quelqu'un sait comment le faire correctement dans ES6?
Les événements sont synchrones - vous le déclenchez avant d'écouter. Utilisation
const testClient = new Client(1,2,3,4,5);
testClient.on('event', () => {console.log('triggered!')} );
testClient.eventTest();
Vous pouvez utiliser process.nextTick()
pour vous rendre le code asynchrone. Ensuite, tout fonctionnera comme prévu. Voici la note de la documentation du nœud:
La méthode
process.nextTick()
ajoute le rappel à la "file d'attente de tick suivante". Une fois que le tour actuel du tour de boucle d'événement se termine, tous les rappels actuellement dans la prochaine file d'attente seront appelés.
eventTest(){
process.nextTick(() => {
this.emit("event");
});
console.log(this.token);
}