Спасибо @ Винсент Роберт , я закончил использовать ваш основной пример, хотя на самом деле это newBegin + oldEnd - oldBegin
. Вот упрощенное конечное решение:
// don't update end date if there's already an end date but not an old start date
if (!oldEnd || oldBegin) {
var selectedDateSpan = 1800000; // 30 minutes
if (oldEnd) {
selectedDateSpan = oldEnd - oldBegin;
}
newEnd = new Date(newBegin.getTime() + selectedDateSpan));
}
Вы можете просто ввести значение в 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
});
Лично я предпочитаю второй.