Es gibt keine solche Funktionalität von ipcMain
*. Sie können jedoch fast das gleiche Ergebnis asynchron mit den folgenden Schritten erreicht werden:
- Platz Ihren Code, den Sie erst nach dem synchronen Aufruf in einem
ipcMain
Rückruf laufen würden.
- Antwort ipc Nachricht in Renderer-Prozess mit dem Ergebnis
event.sender.send
Ein Dummy Beispiel Summe mit diesem Ansatz sieht wie folgt aus:
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 (verwiesen von 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))
})
}
* Ich nehme an, es ist, weil synchron von Haupt Aufruf des Haupt NodeJS Prozess zu Renderer, die Renderer Prozesse tut dienen auch schließlich blockieren würde.
Ich glaube, Sie können nicht, weil Sie den Hauptknoten Thread auf diese Weise blockieren würde, die Renderer Prozesse auch läuft. Aber ich denke, Sie können dasselbe asynchron erreichen, indem Sie in Ihrem Renderer-Callback mit 'event.sender.send' antworten und im main darauf warten – pergy