首页 > 解决方案 > 如何判断消息是来自主进程中的 send 还是 sendSync?

问题描述

在主进程中,ipcMain.on 收到的消息是来自send还是sendSync

ipcMain.on('eventName', (event, arg) => {
  if ( /* ??? */ ) {
    event.sender.send('AsyncEventName', arg)
  } else {
    event.returnValue = arg
  }
})

标签: electron

解决方案


您可以只传入一个值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
});

就个人而言,我更喜欢第二种。


推荐阅读