, tidakkah lebih berguna untuk dapat mencipta dan mencetuskan peristiwa tersuai? Artikel ini akan meneroka bagaimana untuk mencapai matlamat ini. Pertama, kami akan menunjukkan cara mengeluarkan peristiwa biasa. Sebagai contoh, apabila seseorang memasuki kedai, cincin loceng untuk menunjukkan kewujudannya, yang sama dengan corak pemerhati di mana peristiwa bertindak sebagai subjek dan semua fungsi yang dilampirkan pada peristiwa adalah seperti pemerhati. Contoh kedai adalah seperti berikut: request
const events = require('events'); const eventEmitter = new events.EventEmitter(); const ringBell = () => { console.log('ring ring ring'); }; eventEmitter.on('doorOpen', ringBell); eventEmitter.emit('doorOpen');
. Kemudian, buat contoh kelas events
(kami akan melanjutkannya kemudian). Selepas itu, kami meletakkan fungsi EventEmitter
ke dalam pembolehubah supaya ia boleh dipanggil dengan cara ini. Ia hanya mencetak "cincin cincin cincin" di konsol. Seterusnya adalah titik utama. Kami menggunakan kaedah ringBell
untuk menambah fungsi eventEmitter.on()
ke senarai fungsi ringBell
peristiwa. Ini sebenarnya tidak melakukan apa -apa, hanya mendaftarkan fungsi kami. Keajaiban sebenar berlaku pada baris seterusnya, apabila kita mengeluarkan peristiwa. Memanggil kaedah doorOpen
akan melaksanakan semua fungsi yang didaftarkan dengan kaedah emit()
. Ini tidak begitu menarik, jika kita hanya mahu loceng untuk berdering, kita boleh memanggil fungsi secara langsung. Tetapi itulah yang menarik mengenai peristiwa: anda boleh mendaftarkan seberapa banyak fungsi yang anda suka. Sebagai contoh, kita juga boleh melakukan ini: on
eventEmitter.on('doorOpen', ringBell); eventEmitter.on('doorOpen', doSomething); eventEmitter.on('doorOpen', doSomethingElse); eventEmitter.emit('doorOpen');
. Kami juga boleh menggunakan fungsi dengan parameter sebagai pendengar: EventEmitter
eventEmitter.on('doorOpen', (ring) => { console.log(ring); }); eventEmitter.emit('doorOpen', 'ringeling');
. Walaupun ini sangat kuat, dalam komuniti Node.js, amalan biasa adalah mewarisi dari kelas emit()
. Kita boleh melakukan ini dengan membuat kelas EventEmitter
yang mempunyai kaedah Door
yang akan memancarkan open()
peristiwa. Sila lihat kod ini: doorOpen
const events = require('events'); function Door(colour) { this.colour = colour; events.EventEmitter.call(this); this.open = () => { this.emit('open'); }; } Door.prototype.__proto__ = events.EventEmitter.prototype; const frontDoor = new Door('brown'); frontDoor.on('open', () => { console.log('ring ring ring'); }); frontDoor.open();
, kami menetapkan warna pintu dan melaksanakan kaedah pembina Door
menggunakan kaedah EventEmitter
objek call()
. Kemudian, kami mengisytiharkan kaedah EventEmitter
, yang memancarkan acara "terbuka". Barisan kod ini: open
const events = require('events'); const eventEmitter = new events.EventEmitter(); const ringBell = () => { console.log('ring ring ring'); }; eventEmitter.on('doorOpen', ringBell); eventEmitter.emit('doorOpen');
Salin semua EventEmitter
Properties to Door
objek. Kemudian kami membuat frontDoor
, yang merupakan contoh Door
dengan warna coklat. Kemudian kami menambah pendengar acara, akhirnya membuka pintu dan mencetak mesej di konsol. Saya harap semua orang dapat melihat modul events
ini sangat kuat dan berguna! Akhirnya, modul events
memberikan kami cara untuk menyenaraikan semua pendengar acara yang dilampirkan pada acara dan memadam pendengar acara.
eventEmitter.on('doorOpen', ringBell); eventEmitter.on('doorOpen', doSomething); eventEmitter.on('doorOpen', doSomethingElse); eventEmitter.emit('doorOpen');
anda boleh menggunakan atribut listeners
untuk mencapainya. Sudah tentu, ini hanya berfungsi jika anda tidak menggunakan fungsi tanpa nama sebagai pendengar acara. Sekiranya kita mahu, kita boleh mengeluarkan loceng dari pintu:
eventEmitter.on('doorOpen', (ring) => { console.log(ring); }); eventEmitter.emit('doorOpen', 'ringeling');
atau, kita juga boleh mengeluarkan semua pendengar:
const events = require('events'); function Door(colour) { this.colour = colour; events.EventEmitter.call(this); this.open = () => { this.emit('open'); }; } Door.prototype.__proto__ = events.EventEmitter.prototype; const frontDoor = new Door('brown'); frontDoor.on('open', () => { console.log('ring ring ring'); }); frontDoor.open();
Terima kasih kerana membaca panduan ini dan semoga anda mendapat sesuatu! Jumpa lagi lain!
EventEmitter
adalah modul teras dalam node.js yang memudahkan komunikasi antara objek. Ia adalah sebahagian daripada modul events
untuk mengeluarkan dan mengendalikan peristiwa tersuai. Kelas EventEmitter
berfungsi dengan mendaftarkan fungsi atau pengendali acara ke acara bernama. Apabila sesuatu peristiwa dipancarkan oleh objek EventEmitter
, semua fungsi yang dilampirkan pada acara itu dipanggil serentak.
Mewujudkan contoh EventEmitter
adalah mudah. Pertama, anda perlu mengimport modul events
. Anda kemudian boleh membuat contoh baru menggunakan kata kunci new
. Berikut adalah contoh mudah:
Door.prototype.__proto__ = events.EventEmitter.prototype;
Untuk mengeluarkan peristiwa, anda boleh menggunakan kaedah EventEmitter
contoh emit
. Kaedah ini membolehkan anda menentukan nama acara dan lulus bilangan parameter kepada pendengar acara. Berikut adalah contoh:
const ring = () => { console.log('ring'); }; frontDoor.on('open', ring); console.log(require('util').inspect(frontDoor.listeners('open'))); // 输出 [ ring ]
Untuk mendengar peristiwa, anda boleh menggunakan kaedah EventEmitter
contoh on
. Kaedah ini membolehkan anda menentukan nama acara dan fungsi panggil balik yang akan dipanggil apabila acara dipancarkan. Berikut adalah contoh:
frontDoor.removeListener('open', ring);
on
membolehkan anda menambah fungsi panggil balik yang akan dipanggil setiap kali acara itu dipancarkan. Sebaliknya, kaedah once
membolehkan anda menambah fungsi panggil balik yang hanya akan dipanggil apabila acara itu dipancarkan pada kali pertama.
Untuk menghapuskan pendengar acara, anda boleh menggunakan kaedah EventEmitter
atau removeListener
contoh off
. Kaedah ini membolehkan anda menentukan nama acara dan fungsi panggil balik yang perlu dikeluarkan. Berikut adalah contoh:
const events = require('events'); const eventEmitter = new events.EventEmitter(); const ringBell = () => { console.log('ring ring ring'); }; eventEmitter.on('doorOpen', ringBell); eventEmitter.emit('doorOpen');
Ya, anda boleh menggunakan kaedah EventEmitter
contoh setMaxListeners
untuk mengehadkan bilangan pendengar untuk acara. Kaedah ini membolehkan anda menentukan bilangan maksimum pendengar yang boleh ditambah untuk acara.
Untuk mendapatkan bilangan pendengar untuk acara, anda boleh menggunakan kaedah EventEmitter
contoh listenerCount
. Kaedah ini membolehkan anda menentukan nama acara dan mengembalikan bilangan pendengar untuk acara itu.
Ya, anda boleh mengeluarkan dan mengendalikan kesilapan dalam EventEmitter
. Jika EventEmitter
tidak mendaftarkan sekurang -kurangnya pendengar untuk acara error
dan acara error
dipancarkan, ralat dilemparkan, jejak timbunan dicetak, dan proses Node.js akan keluar.
Walaupun EventEmitter
adalah modul Node.js dan digunakan terutamanya untuk aplikasi sisi pelayan, terdapat juga versi penyemak imbas yang tersedia. Ini boleh digunakan seperti versi Node.js, yang membolehkan anda menggunakan seni bina yang didorong oleh acara yang sama dalam kod klien anda.
Atas ialah kandungan terperinci Acara Node.js dan EventeMitter. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!