2017-12-01 1 views
1

In electron ist es möglich, eine Synchronisierungsnachricht von IpcRenderer an IpcMain über ipcRenderer.sendSync('synchronous-message', 'ping') zu senden.Synchronisierungsnachricht von IpcMain an IpcRenderer senden - Elektron

auch möglich async Nachricht von IpcMain zu IpcRenderer mit window.webContents.send('ping', 'whoooooooh!')

zu senden, aber ist es eine Möglichkeit, sync Nachricht von IpcMain zu IpcRenderer schicken?

+1

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

Antwort

0

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.

Verwandte Themen