Heim  >  Artikel  >  Web-Frontend  >  Lassen Sie uns ausführlich über EventEmitter in node.js sprechen

Lassen Sie uns ausführlich über EventEmitter in node.js sprechen

青灯夜游
青灯夜游nach vorne
2022-05-09 21:28:542177Durchsuche

Dieser Artikel wird Ihnen helfen, den EventEmitter in node zu verstehen und kurz über asynchrone Operationen, Fehlerereignisse und EventEmitter-Klassen zu sprechen. Ich hoffe, dass er für alle hilfreich ist!

Lassen Sie uns ausführlich über EventEmitter in node.js sprechen

events (Ereignisauslöser)


events ist der integrierte Ereignisauslöser von nodejs Ereignisse werden in vielen integrierten Modulen von node verwendet, z. B. bei jedem Empfang einer Anfrage . Triggerereignisse und Streams sind ereignisbasiert und dienen zum Abhören entsprechender Ereignisse. Alle Objekte, die Ereignisse auslösen, sind EventEmitter-Instanzen. Diese Objekte stellen EventEmitter.on („event“, callback) bereit, um Ereignisse zu registrieren, und EventEmitter.emit löst Ereignisse aus.

Beispiel:

  const events= require('events');
const event=new events();//实例化EventEmitter
event.on('data',(a,b)=>{
    console.log('参数'+a+b)
    console.log(this,'this')
    //注意,如果callback是 箭头函数的话this指向的是全局对象
    //      如果callback是function(){}形式的话,this会绑定到EventEmitter实例上
    console.log('emit触发了data事件')
})
event.emit('data',1,2); //使用emit触发事件

Asynchroner Betrieb

Weil der Rückruf in EventEmitter.on('event name', callback) synchron ausgeführt wird, aber in einigen Fällen müssen wir einen asynchronen Betrieb verwenden, damit wir ihn verwenden können SetImmediate, um asynchrone Vorgänge auszuführen Trigger it Das Ereignis kann nur einmal ausgelöst werden uns selbst, so dass, wenn ein Fehler auftritt Das Fehlerereignis wird ausgelöst, wenn ein Fehler auftritt

 const events= require('events');
const event=new events();
event.on('event', (a, b) => {
    
  setImmediate(() => {
    console.log('this happens asynchronously');
  });
  //因为这里的监听器是同步执行的,但是我们可以使用setImediate函数等待监听器里的其他内容执行完再执行
});
event.emit('event',1,2);

Zusätzlich zur oben genannten Methode können wir errorMonitor auch verwenden, um den durch emit ausgelösten Fehler zu überwachen, ohne das Fehlerereignis zu registrieren. Mit errorMonitor müssen wir Fehlerereignisse nicht mehr manuell registrieren um etwas zu tun, wenn Ereignis-Listener hinzugefügt werden

  const EventEmitter =require('events');
  const MyEventEmitter=new EventEmitter();
  let a=0;
  //正常注册事件和触发
  MyEventEmitter.on('add',()=>{
      a++
      console.log(a) 
  })
  MyEventEmitter.emit('add'); // 1;
  MyEventEmitter.emit('add'); // 2;
  // 使用once注册
  MyEventEmitter.once('add',()=>{
      a++
      console.log(a);
  })
  MyEventEmitter.emit('add') // 1
  MyEventEmitter.emit('add') // 不生效了
removeListener-Ereignis

removeListener-Ereignis wird zum Löschen registrierter Ereignisse verwendet. RemoveListener verhindert jedoch nicht Ereignisse, die durch emit

 const EventEmitter=require('events');
 const MyEventEmitter=new EventEmitter();
 MyEvenEmitter.on('error',(err)=>{
   console.error(err,'报错了')
 })

addListener und on ausgelöst werden. Die Funktion ist dieselbe eventNames

Gibt ein Array zurück. Das Array enthält die Namen aller registrierten Ereignisse wird eine Warnung sein Aber wir können es über setMaxListener(20) ändern.

  const {EventEmitter,errorMonitor}=require('events');
  const MyEventEmitter=new EventEmitter();
  MyEventEmitter.on(errorMonitor,(err)=>{
      console.log(err);
  })
  MyEventEmitter('error' , new Error('报错了'))

listenerCountDie Anzahl der registrierten Ereignisse zurückgeben.

Das obige ist der detaillierte Inhalt vonLassen Sie uns ausführlich über EventEmitter in node.js sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen