#electron
#electron
Вопрос:
в главном процессе ipcMain.on получено сообщение от send
или sendSync
?
ipcMain.on('eventName', (event, arg) => {
if ( /* ??? */ ) {
event.sender.send('AsyncEventName', arg)
} else {
event.returnValue = arg
}
})
Комментарии:
1. Вы могли бы использовать разные каналы событий для асинхронности и синхронизации, как показано в документах ipcMain . У вас есть ограничения, которые не позволяют вам это сделать? Если да, то если вы добавите их к своему вопросу, вы получите лучшие ответы.
Ответ №1:
Вы можете просто передать значение в send
, чтобы провести различие:
ipcRenderer.send("eventName", myArg, true);
ipcRenderer.sendSync("eventName", myArg, false);
И затем в вашем основном коде:
ipcMain.on('eventName', (event, arg, isAsync) => {
if (isAsync) {
event.sender.send('AsyncEventName', arg)
} else {
event.returnValue = arg
}
});
Другой вариант — использовать два разных канала:
ipcRenderer.send("eventName", myArg);
ipcRenderer.sendSync("eventNameSync", myArg);
И затем в вашем основном коде:
ipcMain.on('eventName', (event, arg) => {
event.sender.send('AsyncEventName', arg)
});
ipcMain.on('eventNameSync', (event, arg) => {
event.returnValue = arg
});
Лично я предпочитаю второе.
Комментарии:
1. Я хотел бы знать разницу между
events
inipcMain.on
throughsend
иsendSync
, или это одно и то же?2. Ну,
ipcMain
принимает событие типаElectron.Event
(при условии, что вы используете TypeScript) независимо от того, как оно вызвано. Это описано здесь , и похоже, что это одно и то же. У них просто есть свойствоsender
andreturnValue
.