


Mari bercakap secara mendalam tentang EventEmitter dalam node.js
Artikel ini akan membawa anda melalui EventEmitter dalam nod, dan bercakap secara ringkas tentang operasi tak segerak, acara ralat dan kelas EventEmitter saya harap ia akan membantu semua orang.
acara (pencetus peristiwa)
acara ialah pencetus peristiwa terbina dalam nodej , peristiwa digunakan dalam kebanyakan modul terbina dalam nod Contohnya, http.server mencetuskan peristiwa setiap kali ia menerima permintaan dan menggunakan aliran untuk mendengar peristiwa yang sepadan berdasarkan peristiwa.
Semua objek yang mencetuskan peristiwa ialah kejadian EventEmitter.
Contoh:
const events= require('events'); const event=new events();//实例化EventEmitter event.on('data',(a,b)=>{ console.log('参数'+a+b) console.log(this,'this') //注意,如果callback是 箭头函数的话this指向的是全局对象 // 如果callback是function(){}形式的话,this会绑定到EventEmitter实例上 console.log('emit触发了data事件') }) event.emit('data',1,2); //使用emit触发事件
Kendalian tak segerak
Kerana EventEmitter.on('nama acara', Panggilan balik dalam panggilan balik) dilaksanakan secara serentak, tetapi dalam beberapa kes kita perlu menggunakan operasi tak segerak, jadi kita boleh menggunakan SetImmediate untuk melaksanakan operasi tak segerak
const events= require('events'); const event=new events(); event.on('event', (a, b) => { setImmediate(() => { console.log('this happens asynchronously'); }); //因为这里的监听器是同步执行的,但是我们可以使用setImediate函数等待监听器里的其他内容执行完再执行 }); event.emit('event',1,2);
cetus sekali
Apabila kita biasanya mencetuskan peristiwa melalui emit, emit akan dicetuskan beberapa kali jika terdapat beberapa acara, tetapi kita boleh menggunakan sekali untuk mendaftar acara, dan peristiwa yang dicetuskan menggunakan sekali hanya boleh dicetuskan sekali
const EventEmitter =require('events'); const MyEventEmitter=new EventEmitter(); let a=0; //正常注册事件和触发 MyEventEmitter.on('add',()=>{ a++ console.log(a) }) MyEventEmitter.emit('add'); // 1; MyEventEmitter.emit('add'); // 2; // 使用once注册 MyEventEmitter.once('add',()=>{ a++ console.log(a); }) MyEventEmitter.emit('add') // 1 MyEventEmitter.emit('add') // 不生效了
acara ralat
EventEmitter tidak mempunyai acara ralat, jadi apabila ralat berlaku, pelaksanaan hanya boleh dipaksa untuk keluar, jadi kita mesti Daftar peristiwa ralat sendiri supaya peristiwa ralat dicetuskan apabila ralat berlaku
const EventEmitter=require('events'); const MyEventEmitter=new EventEmitter(); MyEvenEmitter.on('error',(err)=>{ console.error(err,'报错了') })
Selain kaedah di atas, kami juga boleh menggunakan errorMonitor untuk memantau pencetus pancaran tanpa mendaftarkan ralat Menggunakan errorMonitor, kami tidak lagi perlu mendaftarkan acara ralat secara manual
const {EventEmitter,errorMonitor}=require('events'); const MyEventEmitter=new EventEmitter(); MyEventEmitter.on(errorMonitor,(err)=>{ console.log(err); }) MyEventEmitter('error' , new Error('报错了'))
Kelas EventEmitter
acara newListener
Acara newListener akan dicetuskan apabila kami menambah pendengar acara, jadi kami boleh mendaftarkan acara newListener untuk melakukan sesuatu apabila menambahkan pendengar acara
const {EventEmitter}=require('events'); const MyEvent=new EventEmitter(); MyEvent.on('newListener',(name,litener)=>{ //name就是正在监听的事件的名称 //listener是事件的处理函数 MyEvent.on('event',()=>{ console.log('在newListener添加的事件') }) }) MyEvent.on('event',()=>{ console.log('正常注册的event事件') }) //此时我们再不触发event事件的情况下,newListener事件就会执行,因为我们只要正在注册事件就会触发newListener事件 //注意:newListener事件必须要使用EventEmitter.once()注册,因为如果我们在newListener事件里再去添加注册事件的话,而且外边有多个注册事件就会触发多次newListener事件,就会发生堆栈溢出 MyEvent.emit('event'); //打印的结果 // 在newListener注册的事件 // 正常注册的event事件
alih keluar Acara Pendengar
acara removeListener digunakan untuk memadamkan acara berdaftar Walau bagaimanapun, removeListener tidak akan menghalang acara dicetuskan oleh emit
const callbackB=()=>{ console.log('B') } const callbackA=()=>{ console.log('A') event.removeListener('data',callbackB) } event.on('data',callbackA) event.on('data',callbackB) event.emit('data'); //在执行callbackA的时候删除了data,但是不会阻止掉下一个emit的触发 event.emit('data'); //在这里的时候才是真正被删除掉了
addListener dan pada Sama seperti <🎜. >
eventNames
mengembalikan tatasusunan yang mengandungi nama semua acara berdaftarconst {EventEmitter} =require('events'); const MyEvent=new EventEmitter(); MyEvent.on('data',()=>{}); MyEvent.on('finish',()=>{}); console.log(MyEvent.eventNames()); //打印结果 ['data','finish']
getMaxListeners
pulangan bilangan maksimum acara yang boleh didaftarkan adalah 10. Jika lebih daripada 10, akan ada amaran. Tetapi kita boleh mengubah suainya melalui setMaxListener(20)const {EventEmitter} =require('events'); const MyEvent=new EventEmitter(); console.log(MyEvent.getMaxListener()); //10 event.setMaxListener(20); console.log(MyEvent.getMaxListener(20));
listenerCount
Kembalikan bilangan acara berdaftarconst {EventEmitter} =require('events'); const MyEvent=new EventEmitter(); MyEvent.on('data',()=>{}); MyEvent.on('data',()=>{}); MyEvent.on('finish',()={}); console.log(MyEvent.listenerCount()) // 2
tutorial nodejs!
Atas ialah kandungan terperinci Mari bercakap secara mendalam tentang EventEmitter dalam node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Node.js boleh digunakan sebagai rangka kerja bahagian belakang kerana ia menawarkan ciri seperti prestasi tinggi, kebolehskalaan, sokongan merentas platform, ekosistem yang kaya dan kemudahan pembangunan.

Untuk menyambung ke pangkalan data MySQL, anda perlu mengikuti langkah berikut: Pasang pemacu mysql2. Gunakan mysql2.createConnection() untuk mencipta objek sambungan yang mengandungi alamat hos, port, nama pengguna, kata laluan dan nama pangkalan data. Gunakan connection.query() untuk melaksanakan pertanyaan. Akhir sekali gunakan connection.end() untuk menamatkan sambungan.

Terdapat dua fail berkaitan npm dalam direktori pemasangan Node.js: npm dan npm.cmd Perbezaannya adalah seperti berikut: sambungan berbeza: npm ialah fail boleh laku dan npm.cmd ialah pintasan tetingkap arahan. Pengguna Windows: npm.cmd boleh digunakan daripada command prompt, npm hanya boleh dijalankan dari baris arahan. Keserasian: npm.cmd adalah khusus untuk sistem Windows, npm tersedia merentas platform. Cadangan penggunaan: Pengguna Windows menggunakan npm.cmd, sistem pengendalian lain menggunakan npm.

Pembolehubah global berikut wujud dalam Node.js: Objek global: modul Teras global: proses, konsol, memerlukan pembolehubah persekitaran Runtime: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Perbezaan utama antara Node.js dan Java ialah reka bentuk dan ciri: Didorong peristiwa vs. didorong benang: Node.js dipacu peristiwa dan Java dipacu benang. Satu-benang vs. berbilang benang: Node.js menggunakan gelung acara satu-benang dan Java menggunakan seni bina berbilang benang. Persekitaran masa jalan: Node.js berjalan pada enjin JavaScript V8, manakala Java berjalan pada JVM. Sintaks: Node.js menggunakan sintaks JavaScript, manakala Java menggunakan sintaks Java. Tujuan: Node.js sesuai untuk tugas intensif I/O, manakala Java sesuai untuk aplikasi perusahaan besar.

Penjelasan dan Panduan Pemasangan Terperinci untuk Pinetwork Nodes Artikel ini akan memperkenalkan ekosistem pinetwork secara terperinci - nod pi, peranan utama dalam ekosistem pinetwork, dan menyediakan langkah -langkah lengkap untuk pemasangan dan konfigurasi. Selepas pelancaran Rangkaian Ujian Blockchain Pinetwork, nod PI telah menjadi bahagian penting dari banyak perintis yang aktif mengambil bahagian dalam ujian, bersiap sedia untuk pelepasan rangkaian utama yang akan datang. Jika anda tidak tahu kerja pinet, sila rujuk apa itu picoin? Berapakah harga untuk penyenaraian? Penggunaan PI, perlombongan dan analisis keselamatan. Apa itu Pinetwork? Projek Pinetwork bermula pada tahun 2019 dan memiliki syiling pi cryptocurrency eksklusifnya. Projek ini bertujuan untuk mewujudkan satu yang semua orang boleh mengambil bahagian

Ya, Node.js ialah bahasa pembangunan bahagian belakang. Ia digunakan untuk pembangunan bahagian belakang, termasuk mengendalikan logik perniagaan sebelah pelayan, mengurus sambungan pangkalan data dan menyediakan API.

Langkah-langkah penggunaan pelayan untuk projek Node.js: Sediakan persekitaran penggunaan: dapatkan akses pelayan, pasang Node.js, sediakan repositori Git. Bina aplikasi: Gunakan npm run build untuk menjana kod dan kebergantungan yang boleh digunakan. Muat naik kod ke pelayan: melalui Git atau Protokol Pemindahan Fail. Pasang kebergantungan: SSH ke dalam pelayan dan gunakan pemasangan npm untuk memasang kebergantungan aplikasi. Mulakan aplikasi: Gunakan arahan seperti node index.js untuk memulakan aplikasi, atau gunakan pengurus proses seperti pm2. Konfigurasikan proksi terbalik (pilihan): Gunakan proksi terbalik seperti Nginx atau Apache untuk menghalakan trafik ke aplikasi anda
