Table des matières
Les mots précédents
EventEmitter
事件
Maison interface Web js tutoriel Exemple de tutoriel d'événements dans les événements nodeJS

Exemple de tutoriel d'événements dans les événements nodeJS

Jun 26, 2017 am 11:48 AM
events javascript nodejs 事件

Les mots précédents

Le module d'événements est le module de base de node Presque tous les modules de nœuds couramment utilisés héritent du module d'événements, comme http, fs, etc. Cet article présentera en détail le mécanisme d'événements dans nodeJS

EventEmitter

La plupart des API principales de Node.js adoptent l'architecture asynchrone habituelle basée sur les événements, dans laquelle certains types de les objets (appelés déclencheur) déclenchent périodiquement un événement nommé pour appeler un objet fonction (écouteur). Par exemple, un objet net.Server déclenchera un événement à chaque nouvelle connexion ; un fs.ReadStream déclenchera un événement à l'ouverture d'un fichier ; un flux déclenchera un événement lorsque les données seront lisibles.

【EventEmitter】

La classe EventEmitter est définie et ouverte par le module d'événements. Tous les objets pouvant déclencher des événements sont des instances de la classe EventEmitter

var EventEmitter = require('events');/*{ [Function: EventEmitter]
  EventEmitter: [Circular],
  usingDomains: false,
  defaultMaxListeners: [Getter/Setter],
  init: [Function],
  listenerCount: [Function] } */console.log(EventEmitter);
Copier après la connexion
L'attribut EventEmitter du module d'événements pointe vers le module lui-même

var events = require('events');
console.log(events.EventEmitter === events);//true
Copier après la connexion
EventEmitter est un constructeur qui peut être utilisé pour générer une instance de l'émetteur générateur d'événements

var EventEmitter = require('events');var emitter = new EventEmitter();/*EventEmitter {
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined } */console.log(emitter);
Copier après la connexion

Méthode

[emitter.emit(eventName[, ...args])]

eventName <any>...args <any>
Copier après la connexion
Cette méthode appelle de manière synchrone chaque écouteur enregistré à l'événement nommé eventName dans l'ordre dans lequel les écouteurs sont enregistrés, en transmettant les paramètres fournis. Si l'événement a un écouteur, renvoie true, sinon renvoie false Fonction à la fin du tableau d'écouteur pour l'événement nommé eventName

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test1',function(){});
console.log(emitter.emit('test1'));//trueconsole.log(emitter.emit('test2'));//false
Copier après la connexion
[Note] Ne vérifie pas si l'écouteur a été ajouté. Appeler plusieurs fois et transmettre le même eventName et le même écouteur entraînera l'ajout et l'appel de l'écouteur plusieurs fois

Cette méthode renvoie une référence EventEmitter, qui peut être appelée dans un chaîne
eventName <any> 事件名
listener <Function> 回调函数
Copier après la connexion
Copier après la connexion

[emitter.addListener(eventName, écouteur)]
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
});
emitter.on('test',function(){
    console.log(2);
});
emitter.emit('test');//1 2
Copier après la connexion
  Alias ​​​​d'emetteur.on(eventName, écouteur)

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).on('test',function(){
    console.log(2);
});
emitter.emit('test');//1 2
Copier après la connexion
【emitter.prependListener()】

Contrairement à la méthode on(), la méthode prependListener() peut être utilisée pour ajouter des écouteurs d'événements au début du tableau d'écoute

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.addListener('test',function(){
    console.log(1);
});
emitter.emit('test');//1
Copier après la connexion
【emitter.once(eventName, listening)】

 Cette méthode ajoute une fonction d'écoute unique à l'événement nommé eventName. La prochaine fois que l'événement eventName sera déclenché, l'écouteur sera supprimé puis appelé

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).prependListener('test',function(){
    console.log(2);
});
emitter.emit('test');//2 1
Copier après la connexion

[emitter.prependOnceListener()]

 Cette méthode est utilisée pour ajouter un écouteur d'événement au début du tableau d'écoute. La prochaine fois que l'événement eventName sera déclenché, l'auditeur sera supprimé puis appellera
eventName <any> 事件名
listener <Function> 回调函数
Copier après la connexion
Copier après la connexion
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).once('test',function(){
    console.log(2);
});
emitter.emit('test');//1 2emitter.emit('test');//1
Copier après la connexion
[emitter.removeAllListeners([eventName])]

 Supprimez tous les écouteurs eventName ou spécifiés, renvoyez une référence EventEmitter, qui peut être appelée dans une chaîne
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).prependOnceListener('test',function(){
    console.log(2);
});
emitter.emit('test');//2 1emitter.emit('test');//1
Copier après la connexion
 [Note] C'est une mauvaise idée de supprimer les écouteurs ajoutés ailleurs dans l'approche du code, surtout lorsque l'instance EventEmitter est créée par un autre composant ou module (tel qu'un socket ou un flux de fichiers)

eventName <any>
Copier après la connexion
[emitter.removeListener(eventName, listening)]

Supprimez l'écouteur spécifié du tableau d'écouteurs de l'événement nommé eventName
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).removeAllListeners('test');
emitter.emit('test');//''
Copier après la connexion

[Remarque] RemoveListener supprimera uniquement l'écouteur de Supprime un instance d'écouteur du tableau d'écouteurs. Si un seul écouteur est ajouté plusieurs fois au tableau d'écouteurs pour un eventName spécifié, RemoveListener doit être appelé plusieurs fois pour supprimer chaque instance
eventName <any>listener 
Copier après la connexion

[Remarque] Une fois Lorsqu'un événement est déclenché, tous les auditeurs qui y sont liés seront déclenchés en séquence. Cela signifie que tout appel à RemoveListener() ou à RemoveAllListeners() après le déclenchement de l'événement mais avant que le dernier écouteur ait fini de s'exécuter ne les supprimera pas d'Emit(). Les événements ultérieurs se produiront comme prévu
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('test',show).removeListener('test',show);
emitter.emit('test');//''
Copier après la connexion
Étant donné que les écouteurs sont gérés à l'aide de tableaux internes, l'appel de ceci modifiera l'index de position de tous les écouteurs enregistrés après la suppression de l'écouteur. Bien que cela n'affecte pas l'ordre dans lequel les auditeurs sont appelés, cela signifie que la copie du tableau d'écouteurs renvoyé par la méthode slicer.listeners() doit être recréée

var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('test',show).on('test',show).removeListener('test',show);
emitter.emit('test');//'1'
Copier après la connexion

Paramètres

[emitter.eventNames()]
var EventEmitter = require('events');var emitter = new EventEmitter();function show1(){
    console.log(1);
    emitter.removeListener('test',show2);
}function show2(){
    console.log(2);
}
emitter.on('test',show1).on('test',show2);
emitter.emit('test');//1 2emitter.emit('test');//1
Copier après la connexion
Renvoie un tableau listant les événements pour lesquels le déclencheur a enregistré des auditeurs. Les valeurs du tableau sont des chaînes ou des symboles

[emitter.listenerCount(eventName)]

Retour à l'écoute Le nombre d'auditeurs pour l'événement nommé eventName
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.addListener('test1',function(){console.log(1);});
emitter.addListener('test2',function(){console.log(2);});
console.log(emitter.eventNames());//[ 'test1', 'test2' ]
Copier après la connexion

[emitter.listeners(eventName)]
eventName <any> 正在被监听的事件名
Copier après la connexion

Retour name Une copie du tableau d'écoute pour eventName
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.addListener('test',function(){console.log(1);});
emitter.addListener('test',function(){console.log(1);});
console.log(emitter.listenerCount('test'));//2
Copier après la connexion

【emitter.getMaxListeners()】

  返回 EventEmitter 当前的最大监听器限制值

var EventEmitter = require('events');var emitter = new EventEmitter();
console.log(emitter.getMaxListeners());//10
Copier après la connexion

【emitter.setMaxListeners(n)】

  默认情况下,如果为特定事件添加了超过 10 个监听器,则 EventEmitter 会打印一个警告。 此限制有助于寻找内存泄露。 但是,并不是所有的事件都要被限为 10 个。 emitter.setMaxListeners() 方法允许修改指定的 EventEmitter 实例的限制。 值设为 Infinity(或 0)表明不限制监听器的数量。返回一个 EventEmitter 引用,可以链式调用

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});/*Warning: Possible EventEmitter memory leak detected. 11 a listeners added. Use emitter.setMaxListeners() to increase limit */
Copier après la connexion
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.setMaxListeners(11);
emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});
Copier après la connexion

【EventEmitter.defaultMaxListeners】
  每个事件默认可以注册最多10个监听器。单个EventEmitter实例的限制可以使用emitter.setMaxListeners(n)方法改变。所有EventEmitter实例的默认值可以使用EventEmitter.defaultMaxListeners属性改变

  [注意]设置 EventEmitter.defaultMaxListeners 要谨慎,因为会影响所有EventEmitter 实例,包括之前创建的。因而,调用 emitter.setMaxListeners(n) 优先于 EventEmitter.defaultMaxListeners

var EventEmitter = require('events');var emitter = new EventEmitter();
EventEmitter.defaultMaxListeners = 11;
emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});
Copier après la connexion

 

事件

【'newListener' 事件】

eventName <any> 要监听的事件的名称
listener  事件的句柄函数
Copier après la connexion

  EventEmitter 实例会在一个监听器被添加到其内部监听器数组之前触发自身的 'newListener' 事件

  注册了 'newListener' 事件的监听器会传入事件名与被添加的监听器的引用。事实上,在添加监听器之前触发事件有一个微妙但重要的副作用: 'newListener' 回调中任何额外的被注册到相同名称的监听器会在监听器被添加之前被插入 

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('newListener',function(){
    console.log(2);
})
emitter.on('test',function(){
    console.log(1);
})

emitter.emit('test');//2 1
Copier après la connexion
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
})
emitter.on('newListener',function(){
    console.log(2);
})
emitter.emit('test');//1
Copier après la connexion

【'removeListener' 事件】

eventName <any> 事件名
listener  事件句柄函数
Copier après la connexion

  'removeListener' 事件在 listener 被移除后触发

var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('removeListener',function(){
    console.log(2);//2})
emitter.on('test',show).removeListener('test',show);
Copier après la connexion
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('test',show).removeListener('test',show);
emitter.on('removeListener',function(){
    console.log(2);//''})
Copier après la connexion
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.removeListener('test',show);
emitter.on('removeListener',function(){
    console.log(2);//''})
Copier après la connexion

 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nodejs est-il un framework backend ? Nodejs est-il un framework backend ? Apr 21, 2024 am 05:09 AM

Node.js peut être utilisé comme framework backend car il offre des fonctionnalités telles que des performances élevées, l'évolutivité, la prise en charge multiplateforme, un écosystème riche et une facilité de développement.

Comment connecter Nodejs à la base de données MySQL Comment connecter Nodejs à la base de données MySQL Apr 21, 2024 am 06:13 AM

Pour vous connecter à une base de données MySQL, vous devez suivre ces étapes : Installez le pilote mysql2. Utilisez mysql2.createConnection() pour créer un objet de connexion contenant l'adresse de l'hôte, le port, le nom d'utilisateur, le mot de passe et le nom de la base de données. Utilisez connection.query() pour effectuer des requêtes. Enfin, utilisez connection.end() pour mettre fin à la connexion.

Quelle est la différence entre les fichiers npm et npm.cmd dans le répertoire d'installation de nodejs ? Quelle est la différence entre les fichiers npm et npm.cmd dans le répertoire d'installation de nodejs ? Apr 21, 2024 am 05:18 AM

Il existe deux fichiers liés à npm dans le répertoire d'installation de Node.js : npm et npm.cmd. Les différences sont les suivantes : différentes extensions : npm est un fichier exécutable et npm.cmd est un raccourci de fenêtre de commande. Utilisateurs Windows : npm.cmd peut être utilisé à partir de l'invite de commande, npm ne peut être exécuté qu'à partir de la ligne de commande. Compatibilité : npm.cmd est spécifique aux systèmes Windows, npm est disponible multiplateforme. Recommandations d'utilisation : les utilisateurs Windows utilisent npm.cmd, les autres systèmes d'exploitation utilisent npm.

Quelles sont les variables globales dans nodejs Quelles sont les variables globales dans nodejs Apr 21, 2024 am 04:54 AM

Les variables globales suivantes existent dans Node.js : Objet global : global Module principal : processus, console, nécessiter Variables d'environnement d'exécution : __dirname, __filename, __line, __column Constantes : undefined, null, NaN, Infinity, -Infinity

Y a-t-il une grande différence entre nodejs et java ? Y a-t-il une grande différence entre nodejs et java ? Apr 21, 2024 am 06:12 AM

Les principales différences entre Node.js et Java résident dans la conception et les fonctionnalités : Piloté par les événements ou piloté par les threads : Node.js est piloté par les événements et Java est piloté par les threads. Monothread ou multithread : Node.js utilise une boucle d'événements monothread et Java utilise une architecture multithread. Environnement d'exécution : Node.js s'exécute sur le moteur JavaScript V8, tandis que Java s'exécute sur la JVM. Syntaxe : Node.js utilise la syntaxe JavaScript, tandis que Java utilise la syntaxe Java. Objectif : Node.js convient aux tâches gourmandes en E/S, tandis que Java convient aux applications de grande entreprise.

Nodejs est-il un langage de développement back-end ? Nodejs est-il un langage de développement back-end ? Apr 21, 2024 am 05:09 AM

Oui, Node.js est un langage de développement backend. Il est utilisé pour le développement back-end, notamment la gestion de la logique métier côté serveur, la gestion des connexions à la base de données et la fourniture d'API.

Comment déployer le projet nodejs sur le serveur Comment déployer le projet nodejs sur le serveur Apr 21, 2024 am 04:40 AM

Étapes de déploiement de serveur pour un projet Node.js : Préparez l'environnement de déploiement : obtenez l'accès au serveur, installez Node.js, configurez un référentiel Git. Créez l'application : utilisez npm run build pour générer du code et des dépendances déployables. Téléchargez le code sur le serveur : via Git ou File Transfer Protocol. Installer les dépendances : connectez-vous en SSH au serveur et installez les dépendances de l'application à l'aide de npm install. Démarrez l'application : utilisez une commande telle que node index.js pour démarrer l'application ou utilisez un gestionnaire de processus tel que pm2. Configurer un proxy inverse (facultatif) : utilisez un proxy inverse tel que Nginx ou Apache pour acheminer le trafic vers votre application

Lequel choisir entre nodejs et java ? Lequel choisir entre nodejs et java ? Apr 21, 2024 am 04:40 AM

Node.js et Java ont chacun leurs avantages et leurs inconvénients en matière de développement Web, et le choix dépend des exigences du projet. Node.js excelle dans les applications en temps réel, le développement rapide et l'architecture de microservices, tandis que Java excelle dans la prise en charge, les performances et la sécurité de niveau entreprise.

See all articles