2017-10-26 4 views
0

이것은 app.js 파일입니다.외부 js 파일에서 이벤트를 트리거하는 방법은 무엇입니까?

const MyTest = require('./testApp'); 
const App = new MyTest(); 

App.on('ready',() => { 
    console.log('Hello World'); 
}); 

Package.json 파일. (in) ./testApp/package.json;

{ 
... 
"main": "main.js" 
... 
} 

은 ./testApp/ main.js 파일입니다;

const EventEmitter = require('events'); // node event module 

class Client extends EventEmitter { 
    constructor() { 
    super(); 
    this.sendReady(); 
    } 
    sendReady() { 
    this.emit('ready'); 
    } 
} 

module.exports = Client; 

"app"이 app.js 파일에 성공적으로 설치된 경우 콘솔에 "Hello World"를 쓰려합니다. 좀 더 단순하게하기 위해이 내용을 몇 번 바꿨습니다.

나는 main.js

내가 생성자 함수를 정의하면, 내가 호출하여 얻을 수 ./testApp/에서 app.js에 App.on을 트리거 할 "응용 프로그램을." 이 경우 = 어플 리케이션

그러면 아무 것도 방출하지 않는 이유는 무엇입니까?

참고 :이 응용 프로그램 파일은 로컬에서 작동합니다.

답변

0

emit 전화를 사용하면 해당 후 ready 핸들러를 등록, 그러나

const helper = new pulseHelper.Client(); 

호출 할 때 즉이가 호출되는, Client의 생성자입니다. EventEmitters는 이벤트를 버퍼링하지 않습니다. emit 호출 중에 등록 된 청취자 만 이벤트에 대해 대응할 수 있습니다.

편집 :, 내가 무슨 말 명확히이 예제 볼 수 있습니다 : (주석)

const EventEmitter = require('events'); 

class Client extends EventEmitter { 
    constructor() { 
    super(); 
    this.emit('ready', 'I\'m Ready!'); 
    } 
    boom() { 
    this.emit('ready', 'Boom!');  
    } 
    emit(event, payload) { 
    console.log('Emitting', event, ':', payload); 
    super.emit(event, payload); 
    } 
} 

const c = new Client(); 
c.on('ready', (payload) => console.log(payload)); 
c.boom(); 

이 인쇄 :

# client constructed, it emits an event but no one is listening. 
# however the "debug" emit() implementation prints this: 
Emitting ready : I'm Ready! 
# the listener has been registered, now let's call .boom()! 
# the "debug" emit() implementation prints this: 
Emitting ready : Boom! 
# and the handler prints the following: 
Boom! 
+0

을'this.emit (Events.READY, I ' \ '준비!'); '나를 위해 작동하지 않습니다. 이 청취자에게 어떻게 전화 할 수 있습니까? –

+0

'Events.READY'는''ready''와 동일합니다. 맞습니까? – AKX

+0

'exports.Events = { READY : '준비 완료' } ' –