在主流程中,如何判断消息是来自send还是sendSync?

时间:2019-03-20 03:02:55

标签: electron

在主进程中,ipcMain.on从sendsendSync收到消息了吗?

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

1 个答案:

答案 0 :(得分: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
});

我个人比较喜欢第二个。