Rumah >hujung hadapan web >tutorial js >Mari bercakap tentang modul acara dalam Node.js

Mari bercakap tentang modul acara dalam Node.js

青灯夜游
青灯夜游ke hadapan
2021-12-06 18:42:214701semak imbas

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!

Mari bercakap tentang modul acara dalam Node.js

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.

1. Apakah yang didorong oleh peristiwa?

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.

2. Model acara

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.

3. Modul acara

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. API teras modul acara

4.1 eventEmitter.on(eventName, callback)

Daftar untuk mendengar untuk acara

Parameter:

  • Nama acara: nama acara
  • panggilan balik: fungsi panggil balik dipanggil apabila acara dicetuskan

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:

  • eventName: nama acara
  • callback: fungsi panggil balik dipanggil apabila acara dicetuskan

4.3 eventEmitter.emit(eventName[, ...args])

Cetuskan acara mendengar yang ditentukan

Parameter:

  • eventName: nama acara
  • args parameter pilihan, diluluskan dalam urutan Masukkan parameter fungsi panggil balik;

4.4 eventEmitter.removeListener(eventName, callback)

Alih keluar pendengar untuk acara yang ditentukan . Jika tidak ia tidak sah.

Parameter:

  • Nama acara: nama acara
  • panggilan balik: fungsi panggil balik

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:

  • Nama acara: Nama acara yang perlu dialih keluar sepenuhnya; 🎜>4.6

需要特别注意的是,如果不传参数,将会移除所有的监听事件,比较暴力,建议慎用。 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

(atau

) untuk menunjukkan bilangan pendengar yang tidak terhad. 10EventEmitter

5. Isu segerak dan tak segerak

EventEmitterInfinity0 Panggil semua pendengar

mengikut urutan pendaftaran. Ini memastikan susunan acara yang betul dan membantu mengelakkan keadaan perlumbaan dan ralat logik.

6. Ralat pengendalian

EventEmitterApabila ralat berlaku dalam contoh 同步, operasi biasa adalah untuk mencetuskan acara

. Ini dianggap sebagai kes khas dalam Node.js.

如果 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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam