2016-07-09 9 views
11

मैं ES6 में अपने वर्ग की दौड़ में शामिल EventEmitter पाने के लिए कोशिश कर रहा हूँ:उपयोग 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 में सही तरीके से कैसे किया जाए?

+1

यह 'स्थिरांक EventEmitter = की आवश्यकता होती है ('घटनाओं') नहीं होना चाहिए EventEmitter;।'? –

+1

[यहाँ अच्छा उदाहरण के एक गुच्छा है] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9), या विशेष रूप से [यह एक] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9#file-pseudo- शास्त्रीय-ES6-js) – nem035

+1

@ nem035 मैं पहले से ही संग्रह पाया है, लेकिन मैं समझ नहीं आया कि कैसे एक घटना बनाने के लिए। उदाहरण सिर्फ दिखाते हैं कि कक्षा के अंदर फ़ंक्शन कैसे बनाएं:/ – Alaska

उत्तर

13

घटनाक्रम तुल्यकालिक कर रहे हैं - आप इसे फायरिंग कर रहे हैं इससे पहले कि आप सुन रहे हैं।

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

बहुत बहुत धन्यवाद! यह एक गूंगा गलती है। – Alaska

+0

घटनाओं की घटना @Alaska जब तक आपके कोड उन्हें खुद का उत्सर्जन करता है, गैर नियतात्मक और इस प्रकार अतुल्यकालिक आमतौर पर है। तो मैं इसे एक गूंगा गलती नहीं कहूंगा: डी – ftor

0

आप कोड को एसिंक्रोनस बनाने के लिए process.nextTick() का उपयोग कर सकते हैं। बाद में सबकुछ अपेक्षित के रूप में काम करेगा।

process.nextTick() विधि "अगले टिक कतार" करने के लिए कॉलबैक कहते हैं: इस नोड प्रलेखन से नोट है। एक बार जब घटना लूप बारी की वर्तमान बारी पूरी हो जाती है, तो वर्तमान में अगले टिक कतार में सभी कॉलबैक को कॉल किया जाएगा।

eventTest(){ 
    process.nextTick(() => { 
     this.emit("event"); 
    }); 
    console.log(this.token); 
} 
संबंधित मुद्दे