Nous avons une application électronique. Nous ajoutons / supprimons des écouteurs en utilisant
const funct = () => {} ipcRenderer.on('channel', funct); // later... ipcRenderer.removeListener('channel', funct)
Nous voulons nous assurer qu'aucun gestionnaire d'événements ne fuit dans notre application. Comment interroger ipcRenderer
pour tous les auditeurs de chaînes?
3 Réponses :
Vous n'avez pas la possibilité de rechercher toutes les chaînes à la fois. La chose la plus proche est
https://electronjs.org/docs/api/ipc-renderer#ipcrendererremovealllistenerschannel
ipcRenderer.removeAllListeners(channel)
Vous pouvez supprimer tous les auditeurs de chaînes spécifiques. Vous devez toujours gérer vous-même la liste des chaînes.
Je ne veux pas supprimer les auditeurs, juste pour savoir s'ils sont là ou non.
ipcRenderer.eventNames ()
répertorie toutes les chaînes qui ont des écouteurs ipcRenderer.rawListeners (channel)
répertorie tous les auditeurs pour une chaîne particulière ipcRenderer.eventNames().forEach(channel => ipcRenderer.rawListeners(channel))
Puisque ipcRenderer
et ipcMain
sont Node EventEmitter
, vous pouvez utiliser l'API de base pour la gestion des événements.
eventNames
peut être utilisé pour interroger chaque "canal" et removeAllListeners
peut supprimer chaque auditeur d'un canal
Donc, ce code supprimera chaque auditeur de l'instance de l'émetteur
ipcRenderer.eventNames().forEach(n => { ipcRenderer.removeAllListeners(n) })
Cependant, vous ne devriez pas faire cela en fait! (à partir de la documentation des nœuds)
Notez qu'il est déconseillé de supprimer les écouteurs ajoutés ailleurs dans le code, en particulier lorsque l'instance EventEmitter a été créée par un autre composant ou module (par exemple des sockets ou des flux de fichiers).
Je ne veux pas supprimer les auditeurs, juste pour savoir s'ils sont là ou non. Cependant, eventNames ()
est vraiment utile. J'ai rassemblé tout ce que j'ai appris et créé une réponse. Merci de votre aide!