Dalam projek vue, kadangkala kami menggunakan bas acara global untuk mengurus komunikasi antara komponen. Dalam projek vue2, kita boleh menggunakan $emit
, $on
dan $off
untuk merangkum eventHub
; dalam vue3, $on
dan $off
telah dialih keluar, dan kita boleh menggunakan perpustakaan sarung tangan atau yang kecil -perpustakaan pemancar. Dalam nod, tidak perlu terlalu menyusahkan Ia mempunyai modul acara terbina dalam yang boleh membantu kami memantau dan memancarkan peristiwa.
Mula-mula gunakan sintaks CommonJS untuk mengimport kelas EventEmitter
, dan kemudian menjana contohemitter
(EventEmitter
adalah sangat penting, seperti dalam susulan stream
yang akan diperkenalkan oleh artikel itu ialah contoh EventEmitter
):
const EventEmitter = require('events') const emitter = new EventEmitter()
Kemudian anda boleh menggunakan emitter.on()
untuk memantau acara tersebut in ialah nama acara, dan parameter kedua Parameter ialah panggilan balik yang akan dilaksanakan selepas mendengar acara yang dipancarkan. Jika terdapat parameter masuk semasa memancarkan acara, mereka akan dihantar ke fungsi panggil balik , atau anda boleh menggunakan baki parameter fungsi seperti berikut Dapatkan: [Tutorial berkaitan yang disyorkan: tutorial video nodejs, Pengajaran pengaturcaraan]
// 监听事件 emitter.on('test', (...args) => { console.log(args) // [ 1, 2, 3 ] }) // 发射事件 emitter.emit('test', 1, 2, 3)
Jika anda hanya perlu mendengar acara sekali sahaja, anda boleh menggunakan emitter.once()
:
emitter.once('test', () => { console.log('监听到了事件发射') }) emitter.emit('test') emitter.emit('test') // 本次发射不会触发打印
Jika terdapat berbilang tempat yang memantau acara seperti yang ditunjukkan dalam contoh di bawah, sekali acara dicetuskan, panggilan balik pendengaran akan dicetuskan mengikut urutan:
emitter.on('test', () => { console.log('监听到了事件发射,1') }) emitter.on('test', () => { console.log('监听到了事件发射,2') }) emitter.emit('test')
Hasil pelaksanaan:
Jika anda ingin menambah acara mendengar ke hadapan , anda boleh menggunakan emitter.prependListener()
(atau emitter.prependOnceListener()
, yang bermaksud mendengar terlebih dahulu tetapi sekali sahaja):
emitter.on('test', () => { console.log('监听到了事件发射,1') }) emitter.prependListener('test', () => { console.log('监听到了事件发射,2') }) emitter.emit('test')
Hasil semasa adalah seperti berikut:
boleh dialih keluar menggunakan emitter.off()
(atau emitter.removeListener()
) Untuk memantau acara, nama acara dan fungsi panggil balik yang sepadan perlu dimasukkan, jadi panggilan balik apabila kita mendengar tidak boleh ditakrifkan secara langsung di dalam emitter.on()
seperti di atas. Ia perlu ditakrifkan secara luaran dan kemudian menghantar rujukan kepada panggilan balik :
function handler(...args) { console.log(args) // [ 1, 2, 3 ] } emitter.on('test', handler) emitter.emit('test', 1, 2, 3) emitter.off('test', handler) emitter.emit('test', '无法被监听到')
emitter.off()
hanya boleh mengalih keluar satu monitor , dan panggilan balik monitor mesti dihantar masuk. Jika terdapat berbilang monitor dan anda ingin mengalih keluar semuanya, anda boleh menggunakan emitter.removeAllListeners()
:
emitter.on('test', handler) emitter.on('test', handler) emitter.on('test', handler) emitter.removeAllListeners()
emitter.removeAllListeners()
Jika tiada parameter dimasukkan, semua pendengar acara untuk semua nama acara akan dialih keluar. Ia juga boleh memasukkan nama acara dan semua pendengar acara yang sepadan dengan nama acara akan dialih keluar.
Hadkan bilangan pendengar
Pada satu objek EventEmitter, tertentu Bilangan maksimum pendengar untuk nama acara ialah 10 secara lalai Ini boleh disahkan oleh emitter.getMaxListeners()
:
console.log(emitter.getMaxListeners()) // 10
Sebagai contoh, jika anda menulis emitter.on('test', handler)
11 kali, ralat akan berlaku. dilaporkan dan anda akan digesa untuk menggunakan emitter.setMaxListeners()
Untuk meningkatkan had maksimum:
Jika kami ingin tahu berapa ramai pendengar yang ada untuk nama acara tertentu pada semasa Objek EventEmitter dan sama ada objek tersebut melebihi had maksimum, kita boleh menggunakan emitter.listenerCount()
Lihat nama acara masuk:
console.log(emitter.listenerCount('test'))
Dapatkan nama acara dan pendengar
Gunakan emitter.eventNames()
untuk mendapatkan objek EventEmitter semasa Semua nama acara berdaftar mengembalikan tatasusunan yang terdiri daripada rentetan acara:
emitter.on('test1', handler) emitter.on('test2', handler) console.log(emitter.eventNames()) // [ 'test1', 'test2' ]
Jika anda ingin mendapatkan semua pendengar yang sepadan dengan acara, anda boleh menggunakan emitter.listeners()
dan lulus dalam nama acara:
function handler1() {} function handler2() {} emitter.on('test', handler1) emitter.on('test', handler2) console.log(emitter.listeners('test'))
Keputusan yang diperoleh adalah seperti berikut:
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!
Atas ialah kandungan terperinci Analisis ringkas modul acara Node. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!