Как определить, получено сообщение от send или sendSync в основном процессе?

#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 in ipcMain.on through send и sendSync , или это одно и то же?

2. Ну, ipcMain принимает событие типа Electron.Event (при условии, что вы используете TypeScript) независимо от того, как оно вызвано. Это описано здесь , и похоже, что это одно и то же. У них просто есть свойство sender and returnValue .