2017-10-26 10 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.jsファイルにインストールされている場合は、私は、コンソールは、「Hello Worldのを」書きたいです。私はよりシンプルにしたいので、このコンテンツを数回変更しました。

私は、コンストラクタで関数を定義する場合、私は呼び出すことによってそれを得ることができる./testApp/ main.js

からapp.jsでApp.onをトリガーにしたい「アプリケーションを。」この場合この = アプリケーション

次に、何も出力しないでください。

注:このアプリケーションファイルはローカルで動作します。

答えて

0

emitコールはすなわち、それはあなたが

const helper = new pulseHelper.Client(); 

を起動するときただし、それだけで後readyハンドラを登録呼び出される、Clientさんにコンストラクタです。 EventEmittersはイベントをバッファしません。 emitコールの間に登録されたリスナーのみがイベントに対応できます。

EDIT:、私が話しているものを明確にこの例を参照するには:

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 \ 'm準備!'); '私のために動作しません。どのように私はこのリスナーを呼び出すことができますか? –

+0

'Events.READY'は' 'ready''と同じですよね? – AKX

+0

'exports.Events = { READY: '準備完了' };' –

関連する問題