There is no such functionality of ipcMain
*. However, you can achieve almost the same result asynchronously with the following steps:
- Place your code which you would run only after the synchronous call in an
ipcMain
callback.
- Reply to ipc message in renderer process with the result using
event.sender.send
A dummy example of sum using this approach looks like the following:
main.js
const {app, BrowserWindow, ipcMain} = require('electron')
const path = require('path')
app.once('ready', () => {
let win = new BrowserWindow()
// have to run "sync", that is only after result is ready
const doJobWithResult = (res) => {
console.log(res)
}
win.webContents.once('dom-ready', () => {
win.webContents
.send('sum-request', 23, 98, 3, 61)
ipcMain.once('sum-reply', (event, sum) => {
doJobWithResult(sum)
})
})
win.loadURL(path.resolve(__dirname, 'test.html'))
})
renderer.js (referred from test.html)
const {ipcRenderer} = require('electron')
window.onload = () => {
const add = (a, b) => {
return a + b
}
ipcRenderer.on('sum-request', (event, ...args) => {
event.sender.send('sum-reply', [...args].reduce(add, 0))
})
}
* I suppose it's because calling synchronously from main to renderer would block the main nodejs process which does serve renderer processes too after all.