関連する推奨事項: 「nodejs チュートリアル 」
フロントエンドは確かにイベントに精通しており、ウィンドウのスクロール イベントをバインドします
window.addEventListener('scroll', ev => { console.log(ev); });
Node.js ほとんどの非同期操作はイベント駆動型です。イベントをトリガーできるすべてのオブジェクトは、EventEmitter
クラス
Node.js イベント リスニングは jQuery API と非常によく似ていますemitter.on(eventName,listener)
const ee = new EventEmitter(); ee.on('foo', () => console.log('a'));
emitter.prependListener(eventName,listener)
リスナーを追加できるのは、 prependListener を介したリスナー配列の先頭
const ee = new EventEmitter(); ee.prependListener('foo', () => console.log('a'));
リスナーを 1 回トリガーしてその後トリガーしないようにする場合は、once を使用してイベント
const ee = new EventEmitter(); ee.once('foo', () => console.log('a'));
emitter.emit(eventName[, ... args])開発者のブラウザ環境でのイベント関連の作業のほとんどは、イベントをサブスクライブすることです。つまり、イベント処理関数のリスナーをバインドするためです。Node.js イベント プログラミングでは、多くの場合、実際のトリガー イベントであるイベント オブジェクトを作成する必要があります。 Emit メソッドを使用して、
同期的に eventName という名前のイベントに登録されている各リスナーをリスナーの登録順に呼び出し、指定されたパラメーター
const EventEmitter = require('events'); const myEmitter = new EventEmitter(); // 第一个监听器。 myEmitter.on('event', function firstListener() { console.log('第一个监听器'); }); // 第二个监听器。 myEmitter.on('event', function secondListener(arg1, arg2) { console.log(`第二个监听器中的事件有参数 ${arg1}、${arg2}`); }); // 第三个监听器 myEmitter.on('event', function thirdListener(...args) { const parameters = args.join(', '); console.log(`第三个监听器中的事件有参数 ${parameters}`); }); console.log(myEmitter.listeners('event')); myEmitter.emit('event', 1, 2, 3, 4, 5); // Prints: // [ // [Function: firstListener], // [Function: secondListener], // [Function: thirdListener] // ] // 第一个监听器 // 第二个监听器中的事件有参数 1、2 // 第三个监听器中的事件有参数 1, 2, 3, 4, 5
eventEmitter.emit() このメソッドは、リスナーに任意の数のパラメータを渡すことができます。
this キーワードは、リスナーにバインドされた EventEmitter インスタンスを指します
const myEmitter = new MyEmitter(); myEmitter.on('event', function(a, b) { console.log(a, b, this, this === myEmitter); // 打印: // a b MyEmitter { // domain: null, // _events: { event: [Function] }, // _eventsCount: 1, // _maxListeners: undefined } true }); myEmitter.emit('event', 'a', 'b');
this キーワードは EventEmitter インスタンスを指しません。
const myEmitter = new MyEmitter(); myEmitter.on('event', (a, b) => { console.log(a, b, this); // 打印: a b {} }); myEmitter.emit('event', 'a', 'b');
EventEmitter すべてのリスナーを登録順に同期的に呼び出します。イベントの正しい順序を確保するために、リスナーは
setImmediate() メソッドと
process.nextTick() メソッドを使用して、非同期操作モード
const myEmitter = new MyEmitter(); myEmitter.on('event', (a, b) => { setImmediate(() => { console.log('异步地发生'); }); }); myEmitter.emit('event', 'a', 'b');
#off/removeListener
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">const callback = (stream) => {
console.log('已连接');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);</pre><div class="contentsignin">ログイン後にコピー</div></div>
removeListener() は、リスナー配列から最大 1 つのリスナーのみを削除します。指定されたeventNameのリスナー配列にリスナーが複数回追加された場合は、removeListener()を複数回呼び出して、すべてのインスタンスを削除する必要があります。 ([eventName])
指定されたeventNameイベントのリスナーを削除します。eventNameが指定されていない場合は、イベントオブジェクトのすべてのリスナーを削除します。
emitter.eventNames()
const EventEmitter = require('events'); const myEE = new EventEmitter(); myEE.on('foo', () => {}); myEE.on('bar', () => {}); myEE.eventNames().forEach(eventName => myEE.removeAllListeners);
プログラミング ビデオをご覧ください。 !
以上がNode.jsのイベントの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。