Список всех слушателей канала для ipcRenderer в Электрон - PullRequest
0 голосов
/ 10 апреля 2019

У нас есть электронное приложение. Мы добавляем / удаляем слушателей, используя

const funct = () => {}
ipcRenderer.on('channel', funct);

// later...
ipcRenderer.removeListener('channel', funct)

Мы хотим убедиться, что в нашем приложении нет утечек обработчиков событий. Как бы мы запросили ipcRenderer для всех слушателей канала?

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Поскольку ipcRenderer и ipcMain являются узлами EventEmitter с, вы можете использовать базовый API для управления событиями.

eventNames можетиспользоваться для запроса каждого «канала», и removeAllListeners может удалить каждого слушателя для одного канала

Таким образом, этот код удалит каждого слушателя из экземпляра эмиттера

ipcRenderer.eventNames().forEach(n => {
  ipcRenderer.removeAllListeners(n)
})

Тем не менее, вы не должны делать это на самом деле!(из документации по узлам)

Обратите внимание, что это плохая практика - удалять прослушиватели, добавленные в другом месте кода, особенно когда экземпляр EventEmitter был создан каким-либо другим компонентом или модулем (например, сокетами или файловыми потоками).

0 голосов
/ 10 апреля 2019
  • ipcRenderer.eventNames() перечисляет все каналы, у которых есть слушатели
  • ipcRenderer.rawListeners(channel) перечисляет всех слушателей для определенного канала
ipcRenderer.eventNames().forEach(channel => ipcRenderer.rawListeners(channel))
0 голосов
/ 10 апреля 2019

У вас нет возможности запросить все каналы одновременно.Ближайшая вещь

https://electronjs.org/docs/api/ipc-renderer#ipcrendererremovealllistenerschannel

ipcRenderer.removeAllListeners(channel)

, что вы можете удалить всех слушателей на определенных каналах.Вы все еще должны управлять списком каналов самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...