Table of Contents
Event monitoring and emission
Remove event listening
Home Web Front-end JS Tutorial A brief analysis of Node's events module

A brief analysis of Node's events module

Feb 20, 2023 pm 07:33 PM
nodejs node

A brief analysis of Node's events module

In vue projects, sometimes we use the global event bus to manage communication between components. In the vue2 project, we can use $emit, $on and $off to encapsulate an eventHub; in vue3, $on and $off are removed, we can use mitt library or tiny-emitter library. In node, there is no need to be so troublesome. It has a built-in events module that can help us monitor and emit events.

Event monitoring and emission

First use CommonJS syntax to import the EventEmitter class, and then generate an instance emitter( EventEmitter is very important. For example, the stream that will be introduced in subsequent articles is an instance of EventEmitter):

const EventEmitter = require('events')
const emitter = new EventEmitter()
Copy after login

Then you can use emitter .on() Monitor the event. The first parameter passed in is the event name. The second parameter is the callback to be executed after listening to the event being emitted. If there are incoming parameters when emitting the event, it will be passed For the callback function, you can obtain it one by one, or you can use the remaining parameters of the function as follows: [Recommended related tutorials: nodejs video tutorial, Programming teaching

// 监听事件
emitter.on('test', (...args) => {
  console.log(args) // [ 1, 2, 3 ]
})
// 发射事件
emitter.emit('test', 1, 2, 3)
Copy after login

If you only need to listen to one-time events, you can use

emitter.once():

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

emitter.emit('test')
emitter.emit('test') // 本次发射不会触发打印
Copy after login

If there are multiple places to monitor the event as shown in the following example Once the event is emitted, the listening callbacks will be triggered in order:

emitter.on('test', () => {
  console.log('监听到了事件发射,1')
})
emitter.on('test', () => {
  console.log('监听到了事件发射,2')
})
emitter.emit('test')
Copy after login

Execution results:

A brief analysis of Nodes events module

If you want to add the listening event to the front , you can use

emitter.prependListener() (or emitter.prependOnceListener(), that is, listen in advance but only once):

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

emitter.emit('test')
Copy after login

The current results are as follows:

A brief analysis of Nodes events module

Remove event listening

You can use

emitter.off() (or emitter.removeListener ()) Remove the monitoring of events, but you need to pass in the corresponding event name and callback function, so our callback when monitoring cannot be directly defined in emitter.on()## as above # Internal, you need to define it externally and pass in a reference to the callback: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>function handler(...args) { console.log(args) // [ 1, 2, 3 ] } emitter.on(&amp;#39;test&amp;#39;, handler) emitter.emit(&amp;#39;test&amp;#39;, 1, 2, 3) emitter.off(&amp;#39;test&amp;#39;, handler) emitter.emit(&amp;#39;test&amp;#39;, &amp;#39;无法被监听到&amp;#39;)</pre><div class="contentsignin">Copy after login</div></div>

emitter.off()

Only one listener can be removed, and the listener callback must be passed in. If If you have multiple listeners and want to remove them all, you can use emitter.removeAllListeners(): <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>emitter.on(&amp;#39;test&amp;#39;, handler) emitter.on(&amp;#39;test&amp;#39;, handler) emitter.on(&amp;#39;test&amp;#39;, handler) emitter.removeAllListeners()</pre><div class="contentsignin">Copy after login</div></div>

emitter.removeAllListeners()

If no parameters are passed in, then Removes all event listeners for all event names. It can also pass in the event name, and all event listeners corresponding to the event name will be removed.

Some other methods

Limit on the number of listeners1 EventEmitter object, a certain The maximum number of listeners for an event name defaults to 10, which can be verified by

emitter.getMaxListeners()

: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>console.log(emitter.getMaxListeners()) // 10</pre><div class="contentsignin">Copy after login</div></div>For example, it was written 11 times

emitter.on('test ', handler)

, an error will be reported, prompting us to use emitter.setMaxListeners() to increase the maximum limit:

A brief analysis of Nodes events moduleIf we If you want to know how many listeners there are for a certain event name on the current EventEmitter object and whether it exceeds the maximum limit, you can use

emitter.listenerCount()

to pass in the event name to view: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>console.log(emitter.listenerCount(&amp;#39;test&amp;#39;))</pre><div class="contentsignin">Copy after login</div></div>

Get event names and listenersUse

emitter.eventNames()

to get all event names registered on the current EventEmitter object, and the returned Array composed of event strings: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>emitter.on(&amp;#39;test1&amp;#39;, handler) emitter.on(&amp;#39;test2&amp;#39;, handler) console.log(emitter.eventNames()) // [ &amp;#39;test1&amp;#39;, &amp;#39;test2&amp;#39; ]</pre><div class="contentsignin">Copy after login</div></div> If you want to get all the listeners corresponding to an event, you can use

emitter.listeners()

and pass in the event name:

function handler1() {}
function handler2() {}
emitter.on(&#39;test&#39;, handler1)
emitter.on(&#39;test&#39;, handler2)

console.log(emitter.listeners(&#39;test&#39;))
Copy after login
The results obtained are as follows:

A brief analysis of Nodes events moduleFor more node-related knowledge, please visit:

nodejs tutorial

!

The above is the detailed content of A brief analysis of Node's events module. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The difference between nodejs and tomcat The difference between nodejs and tomcat Apr 21, 2024 am 04:16 AM

The main differences between Node.js and Tomcat are: Runtime: Node.js is based on JavaScript runtime, while Tomcat is a Java Servlet container. I/O model: Node.js uses an asynchronous non-blocking model, while Tomcat is synchronous blocking. Concurrency handling: Node.js handles concurrency through an event loop, while Tomcat uses a thread pool. Application scenarios: Node.js is suitable for real-time, data-intensive and high-concurrency applications, and Tomcat is suitable for traditional Java web applications.

The difference between nodejs and vuejs The difference between nodejs and vuejs Apr 21, 2024 am 04:17 AM

Node.js is a server-side JavaScript runtime, while Vue.js is a client-side JavaScript framework for creating interactive user interfaces. Node.js is used for server-side development, such as back-end service API development and data processing, while Vue.js is used for client-side development, such as single-page applications and responsive user interfaces.

Is nodejs a backend framework? Is nodejs a backend framework? Apr 21, 2024 am 05:09 AM

Node.js can be used as a backend framework as it offers features such as high performance, scalability, cross-platform support, rich ecosystem, and ease of development.

How to connect nodejs to mysql database How to connect nodejs to mysql database Apr 21, 2024 am 06:13 AM

To connect to a MySQL database, you need to follow these steps: Install the mysql2 driver. Use mysql2.createConnection() to create a connection object that contains the host address, port, username, password, and database name. Use connection.query() to perform queries. Finally use connection.end() to end the connection.

What is the difference between npm and npm.cmd files in the nodejs installation directory? What is the difference between npm and npm.cmd files in the nodejs installation directory? Apr 21, 2024 am 05:18 AM

There are two npm-related files in the Node.js installation directory: npm and npm.cmd. The differences are as follows: different extensions: npm is an executable file, and npm.cmd is a command window shortcut. Windows users: npm.cmd can be used from the command prompt, npm can only be run from the command line. Compatibility: npm.cmd is specific to Windows systems, npm is available cross-platform. Usage recommendations: Windows users use npm.cmd, other operating systems use npm.

What are the global variables in nodejs What are the global variables in nodejs Apr 21, 2024 am 04:54 AM

The following global variables exist in Node.js: Global object: global Core module: process, console, require Runtime environment variables: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Is nodejs a back-end development language? Is nodejs a back-end development language? Apr 21, 2024 am 05:09 AM

Yes, Node.js is a backend development language. It is used for back-end development, including handling server-side business logic, managing database connections, and providing APIs.

Is there a big difference between nodejs and java? Is there a big difference between nodejs and java? Apr 21, 2024 am 06:12 AM

The main differences between Node.js and Java are design and features: Event-driven vs. thread-driven: Node.js is event-driven and Java is thread-driven. Single-threaded vs. multi-threaded: Node.js uses a single-threaded event loop, and Java uses a multi-threaded architecture. Runtime environment: Node.js runs on the V8 JavaScript engine, while Java runs on the JVM. Syntax: Node.js uses JavaScript syntax, while Java uses Java syntax. Purpose: Node.js is suitable for I/O-intensive tasks, while Java is suitable for large enterprise applications.

See all articles