Related recommendations: "nodejs Tutorial"
The front-end is certainly no stranger to events, binding the scroll event for the window
window.addEventListener('scroll', ev => { console.log(ev); });
Node.js Most asynchronous operations are event-driven. All objects that can trigger events inherit the EventEmitter
class
Event listening
on
Node.js event listening is very similar to jQuery APIemitter.on(eventName, listener)
const ee = new EventEmitter(); ee.on('foo', () => console.log('a'));
- EventEmitter instance will maintain a listener array, and each listener defaults Will be added to the end of the array
- Every time a listener is added, it will not be checked whether it has been added. Calling on multiple times and passing in the same eventName and listener will cause the listener to be added multiple times
prependListener
emitter.prependListener(eventName, listener)
You can add the listener to the head of the listener array through prependListener
const ee = new EventEmitter(); ee.prependListener('foo', () => console.log('a'));
once
If you want the listener to be triggered once and then no longer trigger, you can use once to bind the event
const ee = new EventEmitter(); ee.once('foo', () => console.log('a'));
Event triggering
emitter.emit(eventName[, ... args])
Most of the developer's event-related work in the browser environment is to subscribe to events, that is, to bind the event processing function listener. In Node.js event programming, it is often necessary to create event objects. The actual trigger event. Use the emit method to synchronously call each listener registered to the event named eventName in the order of listener registration, and pass in the provided parameters
const EventEmitter = require('events'); const myEmitter = new EventEmitter(); // 第一个监听器。 myEmitter.on('event', function firstListener() { console.log('第一个监听器'); }); // 第二个监听器。 myEmitter.on('event', function secondListener(arg1, arg2) { console.log(`第二个监听器中的事件有参数 ${arg1}、${arg2}`); }); // 第三个监听器 myEmitter.on('event', function thirdListener(...args) { const parameters = args.join(', '); console.log(`第三个监听器中的事件有参数 ${parameters}`); }); console.log(myEmitter.listeners('event')); myEmitter.emit('event', 1, 2, 3, 4, 5); // Prints: // [ // [Function: firstListener], // [Function: secondListener], // [Function: thirdListener] // ] // 第一个监听器 // 第二个监听器中的事件有参数 1、2 // 第三个监听器中的事件有参数 1, 2, 3, 4, 5
this points to
eventEmitter.emit()
The method can pass any number of parameters to the listener. this
The keyword will be pointed to the EventEmitter instance bound to the listener
const myEmitter = new MyEmitter(); myEmitter.on('event', function(a, b) { console.log(a, b, this, this === myEmitter); // 打印: // a b MyEmitter { // domain: null, // _events: { event: [Function] }, // _eventsCount: 1, // _maxListeners: undefined } true }); myEmitter.emit('event', 'a', 'b');
You can also use ES6 arrow functions as listeners. But this
keyword will not point to the EventEmitter instance:
const myEmitter = new MyEmitter(); myEmitter.on('event', (a, b) => { console.log(a, b, this); // 打印: a b {} }); myEmitter.emit('event', 'a', 'b');
Asynchronous call
EventEmitter
Call all listeners synchronously in the order of registration, so that To ensure the correct ordering of events, the listener can use the setImmediate()
and process.nextTick()
methods to switch to asynchronous operation mode
const myEmitter = new MyEmitter(); myEmitter.on('event', (a, b) => { setImmediate(() => { console.log('异步地发生'); }); }); myEmitter.emit('event', 'a', 'b');
Event unloading
Node.js provides several methods for uninstalling event bindings
off/removeListener
The off method is an alias of the removeListener method and is used to clean up event bindings emitter.removeListener(eventName, listener)
const callback = (stream) => { console.log('已连接'); }; server.on('connection', callback); // ... server.removeListener('connection', callback);
removeListener() will only remove at most one listener from the listener array. If a listener is added multiple times to the listener array for a specified eventName, removeListener() must be called multiple times to remove all instances
removeAllListeners
emitter. removeAllListeners([eventName])
Remove the listener of the specified eventName event. If eventName is not specified, remove all listeners of the event object. You can get the eventName array on the event object through emitter.eventNames()
const EventEmitter = require('events'); const myEE = new EventEmitter(); myEE.on('foo', () => {}); myEE.on('bar', () => {}); myEE.eventNames().forEach(eventName => myEE.removeAllListeners);
For more programming-related knowledge, please visit: Programming Video! !
The above is the detailed content of Detailed explanation of events in Node.js. For more information, please follow other related articles on the PHP Chinese website!

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Dreamweaver Mac version
Visual web development tools

Notepad++7.3.1
Easy-to-use and free code editor

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
