Artikel ini akan membawa anda melalui modul acara dalam modul Node.js dan memperkenalkan perkara yang didorong oleh peristiwa, seni bina acara NodeJS, API teras modul Acara, dsb. I harap ia akan membantu anda!
Memetik penerangan rasmi: Kebanyakan API teras Node.js dibina di sekeliling seni bina dipacu peristiwa tak segerak idiomatik, di mana jenis tertentu Objek ( dipanggil "pencetus") menyalakan acara yang dinamakan, menyebabkan objek
Function
("pendengar") dipanggil.
Melalui kajian dan aplikasi Nod, kita tahu bahawa NodeJS mengguna pakai I/O berbenang tunggal, dipacu peristiwa, tidak menyekat I/O dan reka bentuk seni bina lain, yang sangat sesuai untuk konkurensi tinggi, aplikasi intensif I/O.
Secara ringkasnya, dipacu peristiwa ialah menggunakan kaedah yang berkesan untuk memantau perubahan dalam status acara dan mengambil tindakan yang sepadan apabila perubahan berlaku.
Mari kita ambil senario permohonan hidup untuk memahami: apabila kita pergi ke restoran untuk memesan makanan, selepas kita membuat pesanan, pelayan memberitahu kita nombor pesanan (ini boleh difahami sebagai mendaftarkan acara), dan kami sedang duduk Kami sedang menunggu, dan pada masa ini telinga kami memantau panggilan pelayan Apabila kami dipanggil, kami boleh pergi ke kaunter penerimaan tetamu untuk mendapatkan makanan kami.
Seni bina acara NodeJS menggunakan model penerbitan langganan klasik
Model penerbitan langganan, yang juga boleh dipanggil mekanisme mesej, mentakrifkan Ketergantungan, kebergantungan ini boleh difahami sebagai sepasang pemerhati N (berbilang atau tunggal) yang pada masa yang sama memantau peralihan keadaan objek yang sepadan Setelah perubahan berlaku, semua pemerhati dimaklumkan, dengan itu mencetuskan peristiwa sepadan yang didaftarkan oleh pemerhati ini menyelesaikan gandingan berfungsi antara objek subjek dan pemerhati.
Modul peristiwa ialah modul yang sangat penting bagi NodeJS Pelaksanaan kebanyakan modul dalam nod mewarisi kelas Acara, seperti fs, http, net, dll. Ia menyediakan acara objek.EventEmitter Teras EventEmitter ialah pelepasan acara dan pendengar acara.
Mudah untuk digunakan:
import { EventEmitter } from 'events'; class MyEmiter extends EventEmitter{}; const myEmitter = new MyEmiter(); myEmitter.on('hello', () => { console.log('hello 有人喊你啦'); }); myEmitter.emit('hello');
4.1 eventEmitter.on(eventName, callback)
Daftar untuk mendengar untuk acara
Parameter:
4.2 eventEmitter.once(eventName, callback)
Anda boleh mendaftarkan pendengar yang akan dipanggil paling banyak sekali untuk acara tertentu. Sebaik sahaja acara dicetuskan, pendengar tidak didaftarkan dan kemudian dipanggil.
Parameter:
4.3 eventEmitter.emit(eventName[, ...args])
Cetuskan acara mendengar yang ditentukan
Parameter:
4.4 eventEmitter.removeListener(eventName, callback)
Alih keluar pendengar untuk acara yang ditentukan . Jika tidak ia tidak sah.
Parameter:
4.5 EventEmitter.removeAllListeners(eventName)
Alih keluar semua pendengar Suatu acara boleh mempunyai berbilang pendengar Jika anda perlu mengalih keluar kesemuanya, anda boleh menggunakan kaedah ini.
Parameter:
需要特别注意的是,如果不传参数,将会移除所有的监听事件,比较暴力,建议慎用。
Mengembalikan salinan tatasusunan fungsi panggil balik mengikat pendengar untuk acara bernama
EventEmitter.listeners(eventName)
4.7
eventName
Mengembalikan tatasusunan yang menyenaraikan peristiwa yang pencetus telah mendaftarkan pendengar.
4.8 EventEmitter.eventNames()
Secara lalai,
akan mencetak amaran jika lebih daripada pendengar ditambahkan untuk acara tertentu. Kaedah EventEmitter.setMaxListeners(n)
emitter.setMaxListeners() membenarkan mengubah suai had bagi contoh khusus ini. Nilai boleh ditetapkan kepada
) untuk menunjukkan bilangan pendengar yang tidak terhad. 10
EventEmitter
EventEmitter
Infinity
0
Panggil semua pendengar
EventEmitter
Apabila ralat berlaku dalam contoh 同步
, operasi biasa adalah untuk mencetuskan acara
如果 EventEmitter
没有为 'error'
事件注册至少一个监听器,并且触发 'error'
事件,则会抛出错误,打印堆栈跟踪,然后退出 Node.js 进程。
作为最佳实践,应始终为 'error'
事件添加监听器。
import { EventEmitter } from 'events'; class MyEmiter extends EventEmitter{}; const myEmitter = new MyEmiter(); myEmitter.on('hello', () => { console.log('hello 有人喊你啦'); }); myEmitter.on('error', (e) => { console.log(e) }) myEmitter.emit('hello'); myEmitter.emit('error', new Error('an error happen'))
更多node相关知识,请访问:nodejs 教程!!
Atas ialah kandungan terperinci Mari bercakap tentang modul acara dalam Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!