Nodejs Chapter 17 (events)

EventEmitter

The core API of Node.js adopts an asynchronous event-driven architecture. Simply put, it uses effective methods to monitor changes in event status and take corresponding actions when the changes occur.

fs.mkdir('/tmp/a/apple', {
    
     recursive: true }, (err) => {
    
    
  if (err) throw err;
});
process.on('xxx',()=>{
    
    

})

For example, if you go to a restaurant to eat, this restaurant is one 调度中心, and then you order food, you can understand that an event is registered emit, and then we wait for the waiter to call us, and when we are called, we go to pick up the food. This is monitoring. this incidenton

event model

The Nodejs event model adopts,发布订阅设计模式

image.png

When a publisher has new news, it publishes the news to the dispatch center. The dispatch center will notify all subscribers of this message. This achieves decoupling between publishers and subscribers. Publishers and subscribers no longer directly depend on each other, and they can extend themselves independently.

Code examples

const EventEmitter = require('events');

const event = new EventEmitter()
//监听test
event.on('test',(data)=>{
    
    
    console.log(data)
})

event.emit('test','xmxmxmxmx') //派发事件

The default number of listening messages is 10

const EventEmitter = require('events');

const event = new EventEmitter()

event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test', (data) => {
    
    
    console.log(data)
})

event.on('test', (data) => {
    
    
    console.log(data)
})
event.on('test',(data)=>{
    
    
    console.log(data)
})
event.on('test',(data)=>{
    
    
    console.log(data)
})

event.emit('test', 'xmxmxmxmx')

How to unblock the number of incoming calls to setMaxListeners

event.setMaxListeners(20)

I only want to monitor once once, even if emitit is dispatched multiple times, it will only be triggered once.

const EventEmitter = require('events');

const event = new EventEmitter()
event.setMaxListeners(20)
event.once('test', (data) => {
    
    
    console.log(data)
})

event.emit('test', 'xmxmxmxmx1')
event.emit('test', 'xmxmxmxmx2')

How to cancel listening off

const EventEmitter = require('events');

const event = new EventEmitter()

const fn = (msg) => {
    
    
   console.log(msg)
}
event.on('test', fn)
event.off('test', fn)

event.emit('test', 'xmxmxmxmx1')
event.emit('test', 'xmxmxmxmx2')

Has anyone used it?

process

image.png

Open nodejs source code and search setupProcessObjectfor this function

image.png

  1. It first introduces the event module
  2. Get the prototype object of process
  3. Set the prototype object of evnet to the prototype object of process
  4. and rebind the context
  5. Mount the process to globalThis so we can access this API globally

Guess you like

Origin blog.csdn.net/qq1195566313/article/details/133583300