2016-07-09 16 views
11

tôi đang cố gắng để có được những EventEmitter trong lớp chạy của riêng tôi trong ES6:Sử dụng EventEmitter trong lớp 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!')}); 

nhưng sự kiện này đang làm gì ^^

Without ES6 tôi đã nhận nó làm việc với điều này mã:

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

Có ai biết cách thực hiện ngay trong ES6 không?

+1

Không nên là 'const EventEmitter = require ('events'). EventEmitter;'? –

+1

[đây là một loạt các ví dụ hay] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9), hoặc cụ thể [this one] (https://gist.github.com/gdi2290/bec4889e0a5785cae2a9#file-pseudo- classic-es6-js) – nem035

+1

@ nem035 Tôi đã tìm thấy bộ sưu tập, nhưng tôi không hiểu cách tạo sự kiện. Các ví dụ chỉ cho thấy cách tạo một hàm bên trong một lớp:/ – Alaska

Trả lời

13

Sự kiện đồng bộ - bạn sẽ kích hoạt nó trước khi bạn nghe. Sử dụng

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

Cảm ơn rất nhiều! Đây là một sai lầm ngớ ngẩn. – Alaska

+0

@Alaska Sự xuất hiện của các sự kiện thường không xác định và do đó không đồng bộ, trừ khi mã của bạn tự phát ra chúng. Vì vậy, tôi sẽ không gọi nó là một sai lầm ngu ngốc: D – ftor

0

Bạn có thể sử dụng process.nextTick() để làm cho mã không đồng bộ. Sau đó mọi thứ sẽ hoạt động như mong đợi. Đây là ghi chú từ tài liệu về nút:

Phương thức process.nextTick() thêm gọi lại vào "hàng đợi đánh dấu tiếp theo". Khi lần lượt của vòng lặp sự kiện lần lượt chạy đến khi hoàn thành, tất cả các cuộc gọi lại hiện tại trong hàng đợi đánh dấu tiếp theo sẽ được gọi.

eventTest(){ 
    process.nextTick(() => { 
     this.emit("event"); 
    }); 
    console.log(this.token); 
} 
Các vấn đề liên quan