Rumah >hujung hadapan web >tutorial js >Acara Node.js dan EventeMitter

Acara Node.js dan EventeMitter

Christopher Nolan
Christopher Nolanasal
2025-02-24 09:14:10743semak imbas

Node.js Events and EventEmitter

kecekapan node.js sebahagiannya disebabkan oleh seni bina berasaskan peristiwa. Tidak seperti membaca semua fail yang diperlukan (seperti PHP) setiap permintaan, node.js hanya memulakan pelayan, memulakan kebanyakan pembolehubah, mengisytiharkan fungsi, dan kemudian menunggu acara itu berlaku. Walaupun Node.js mempunyai beberapa peristiwa berguna yang dibina, seperti peristiwa

, tidakkah lebih berguna untuk dapat mencipta dan mencetuskan peristiwa tersuai? Artikel ini akan meneroka bagaimana untuk mencapai matlamat ini. Pertama, kami akan menunjukkan cara mengeluarkan peristiwa biasa. Sebagai contoh, apabila seseorang memasuki kedai, cincin loceng untuk menunjukkan kewujudannya, yang sama dengan corak pemerhati di mana peristiwa bertindak sebagai subjek dan semua fungsi yang dilampirkan pada peristiwa adalah seperti pemerhati. Contoh kedai adalah seperti berikut: request

<code class="language-javascript">const events = require('events');
const eventEmitter = new events.EventEmitter();

const ringBell = () => {
  console.log('ring ring ring');
};

eventEmitter.on('doorOpen', ringBell);

eventEmitter.emit('doorOpen');</code>
Pertama, kita memuatkan modul teras Node.js

. Kemudian, buat contoh kelas events (kami akan melanjutkannya kemudian). Selepas itu, kami meletakkan fungsi EventEmitter ke dalam pembolehubah supaya ia boleh dipanggil dengan cara ini. Ia hanya mencetak "cincin cincin cincin" di konsol. Seterusnya adalah titik utama. Kami menggunakan kaedah ringBell untuk menambah fungsi eventEmitter.on() ke senarai fungsi ringBell peristiwa. Ini sebenarnya tidak melakukan apa -apa, hanya mendaftarkan fungsi kami. Keajaiban sebenar berlaku pada baris seterusnya, apabila kita mengeluarkan peristiwa. Memanggil kaedah doorOpen akan melaksanakan semua fungsi yang didaftarkan dengan kaedah emit(). Ini tidak begitu menarik, jika kita hanya mahu loceng untuk berdering, kita boleh memanggil fungsi secara langsung. Tetapi itulah yang menarik mengenai peristiwa: anda boleh mendaftarkan seberapa banyak fungsi yang anda suka. Sebagai contoh, kita juga boleh melakukan ini: on

<code class="language-javascript">eventEmitter.on('doorOpen', ringBell);
eventEmitter.on('doorOpen', doSomething);
eventEmitter.on('doorOpen', doSomethingElse);

eventEmitter.emit('doorOpen');</code>
Ini berfungsi juga dan menggunakan sepenuhnya ciri -ciri yang disediakan oleh

. Kami juga boleh menggunakan fungsi dengan parameter sebagai pendengar: EventEmitter

<code class="language-javascript">eventEmitter.on('doorOpen', (ring) => {
  console.log(ring);
});
eventEmitter.emit('doorOpen', 'ringeling');</code>
kita hanya perlu lulus parameter dalam kaedah

. Walaupun ini sangat kuat, dalam komuniti Node.js, amalan biasa adalah mewarisi dari kelas emit(). Kita boleh melakukan ini dengan membuat kelas EventEmitter yang mempunyai kaedah Door yang akan memancarkan open() peristiwa. Sila lihat kod ini: doorOpen

<code class="language-javascript">const events = require('events');

function Door(colour) {
  this.colour = colour;
  events.EventEmitter.call(this);

  this.open = () => {
    this.emit('open');
  };
}

Door.prototype.__proto__ = events.EventEmitter.prototype;

const frontDoor = new Door('brown');

frontDoor.on('open', () => {
  console.log('ring ring ring');
});
frontDoor.open();</code>
Dalam pembina objek

, kami menetapkan warna pintu dan melaksanakan kaedah pembina Door menggunakan kaedah EventEmitter objek call(). Kemudian, kami mengisytiharkan kaedah EventEmitter, yang memancarkan acara "terbuka". Barisan kod ini: open

<code class="language-javascript">const events = require('events');
const eventEmitter = new events.EventEmitter();

const ringBell = () => {
  console.log('ring ring ring');
};

eventEmitter.on('doorOpen', ringBell);

eventEmitter.emit('doorOpen');</code>

Salin semua EventEmitter Properties to Door objek. Kemudian kami membuat frontDoor, yang merupakan contoh Door dengan warna coklat. Kemudian kami menambah pendengar acara, akhirnya membuka pintu dan mencetak mesej di konsol. Saya harap semua orang dapat melihat modul events ini sangat kuat dan berguna! Akhirnya, modul events memberikan kami cara untuk menyenaraikan semua pendengar acara yang dilampirkan pada acara dan memadam pendengar acara.

<code class="language-javascript">eventEmitter.on('doorOpen', ringBell);
eventEmitter.on('doorOpen', doSomething);
eventEmitter.on('doorOpen', doSomethingElse);

eventEmitter.emit('doorOpen');</code>

anda boleh menggunakan atribut listeners untuk mencapainya. Sudah tentu, ini hanya berfungsi jika anda tidak menggunakan fungsi tanpa nama sebagai pendengar acara. Sekiranya kita mahu, kita boleh mengeluarkan loceng dari pintu:

<code class="language-javascript">eventEmitter.on('doorOpen', (ring) => {
  console.log(ring);
});
eventEmitter.emit('doorOpen', 'ringeling');</code>

atau, kita juga boleh mengeluarkan semua pendengar:

<code class="language-javascript">const events = require('events');

function Door(colour) {
  this.colour = colour;
  events.EventEmitter.call(this);

  this.open = () => {
    this.emit('open');
  };
}

Door.prototype.__proto__ = events.EventEmitter.prototype;

const frontDoor = new Door('brown');

frontDoor.on('open', () => {
  console.log('ring ring ring');
});
frontDoor.open();</code>

Terima kasih kerana membaca panduan ini dan semoga anda mendapat sesuatu! Jumpa lagi lain!

Node.js Events and EventeMitter FAQs (FAQs)

Apakah kelas EventeMitter dalam node.js? Bagaimana ia berfungsi?

Kelas

EventEmitter adalah modul teras dalam node.js yang memudahkan komunikasi antara objek. Ia adalah sebahagian daripada modul events untuk mengeluarkan dan mengendalikan peristiwa tersuai. Kelas EventEmitter berfungsi dengan mendaftarkan fungsi atau pengendali acara ke acara bernama. Apabila sesuatu peristiwa dipancarkan oleh objek EventEmitter, semua fungsi yang dilampirkan pada acara itu dipanggil serentak.

Bagaimana untuk membuat contoh eventemitter?

Mewujudkan contoh EventEmitter adalah mudah. Pertama, anda perlu mengimport modul events. Anda kemudian boleh membuat contoh baru menggunakan kata kunci new. Berikut adalah contoh mudah:

<code class="language-javascript">Door.prototype.__proto__ = events.EventEmitter.prototype;</code>

Bagaimana untuk memancarkan acara menggunakan EventeMitter?

Untuk mengeluarkan peristiwa, anda boleh menggunakan kaedah EventEmitter contoh emit. Kaedah ini membolehkan anda menentukan nama acara dan lulus bilangan parameter kepada pendengar acara. Berikut adalah contoh:

<code class="language-javascript">const ring = () => {
  console.log('ring');
};
frontDoor.on('open', ring);

console.log(require('util').inspect(frontDoor.listeners('open'))); // 输出 [ ring ]</code>

Bagaimana untuk mendengar acara menggunakan EventeMitter?

Untuk mendengar peristiwa, anda boleh menggunakan kaedah EventEmitter contoh on. Kaedah ini membolehkan anda menentukan nama acara dan fungsi panggil balik yang akan dipanggil apabila acara dipancarkan. Berikut adalah contoh:

<code class="language-javascript">frontDoor.removeListener('open', ring);</code>

Apakah perbezaan antara kaedah 'On' dan 'Once' dalam EventeMitter?

Kaedah

on membolehkan anda menambah fungsi panggil balik yang akan dipanggil setiap kali acara itu dipancarkan. Sebaliknya, kaedah once membolehkan anda menambah fungsi panggil balik yang hanya akan dipanggil apabila acara itu dipancarkan pada kali pertama.

Bagaimana untuk membuang pendengar acara dari EventeMitter?

Untuk menghapuskan pendengar acara, anda boleh menggunakan kaedah EventEmitter atau removeListener contoh off. Kaedah ini membolehkan anda menentukan nama acara dan fungsi panggil balik yang perlu dikeluarkan. Berikut adalah contoh:

<code class="language-javascript">const events = require('events');
const eventEmitter = new events.EventEmitter();

const ringBell = () => {
  console.log('ring ring ring');
};

eventEmitter.on('doorOpen', ringBell);

eventEmitter.emit('doorOpen');</code>

Bolehkah saya mengehadkan bilangan pendengar untuk acara di EventeMitter?

Ya, anda boleh menggunakan kaedah EventEmitter contoh setMaxListeners untuk mengehadkan bilangan pendengar untuk acara. Kaedah ini membolehkan anda menentukan bilangan maksimum pendengar yang boleh ditambah untuk acara.

Bagaimana untuk mendapatkan bilangan pendengar untuk acara di EventeMitter?

Untuk mendapatkan bilangan pendengar untuk acara, anda boleh menggunakan kaedah EventEmitter contoh listenerCount. Kaedah ini membolehkan anda menentukan nama acara dan mengembalikan bilangan pendengar untuk acara itu.

Bolehkah saya mengeluarkan dan menangani kesilapan dalam EventeMitter?

Ya, anda boleh mengeluarkan dan mengendalikan kesilapan dalam EventEmitter. Jika EventEmitter tidak mendaftarkan sekurang -kurangnya pendengar untuk acara error dan acara error dipancarkan, ralat dilemparkan, jejak timbunan dicetak, dan proses Node.js akan keluar.

Bolehkah saya menggunakan eventemitter dalam penyemak imbas saya?

Walaupun EventEmitter adalah modul Node.js dan digunakan terutamanya untuk aplikasi sisi pelayan, terdapat juga versi penyemak imbas yang tersedia. Ini boleh digunakan seperti versi Node.js, yang membolehkan anda menggunakan seni bina yang didorong oleh acara yang sama dalam kod klien anda.

Atas ialah kandungan terperinci Acara Node.js dan EventeMitter. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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