Rumah > hujung hadapan web > tutorial js > Analisis ringkas modul acara Node

Analisis ringkas modul acara Node

青灯夜游
Lepaskan: 2023-02-21 19:43:28
ke hadapan
2269 orang telah melayarinya

Analisis ringkas modul acara Node

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.

Pemantauan dan pelepasan acara

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()
Salin selepas log masuk

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)
Salin selepas log masuk

Jika anda hanya perlu mendengar acara sekali sahaja, anda boleh menggunakan emitter.once():

emitter.once('test', () => {
  console.log('监听到了事件发射')
})

emitter.emit('test')
emitter.emit('test') // 本次发射不会触发打印
Salin selepas log masuk

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')
Salin selepas log masuk

Hasil pelaksanaan:

Analisis ringkas modul acara Node

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')
Salin selepas log masuk

Hasil semasa adalah seperti berikut:

Analisis ringkas modul acara Node

Alih keluar pendengar acara

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', '无法被监听到')
Salin selepas log masuk

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()
Salin selepas log masuk

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.

Beberapa kaedah lain

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
Salin selepas log masuk

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:

Analisis ringkas modul acara Node

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'))
Salin selepas log masuk

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' ]
Salin selepas log masuk

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'))
Salin selepas log masuk

Keputusan yang diperoleh adalah seperti berikut:

Analisis ringkas modul acara Node

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!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan