需要 ipcMain 帮助

ipcMain help needed

我正在尝试将回复消息发送回我的渲染器。在渲染中,我在控制台日志中打印出“未定义”。我正在尝试从我的 api 调用

中获取 json 响应

到目前为止我尝试了以下方法

ipcMain.on("get_scenes", (event, arg) => {
  axios.get("http://localhost:60704/getMovies").then(function (response) {
    // handle success
    console.log("my message", response);
  });
  event.returnValue = response;
});

ipcMain.on("get_scenes", (event, arg) => {
  axios.get("http://localhost:60704/getMovies").then(function (response) {
    // handle success
    console.log("my message", response);
    event.returnValue = response;
  });
  
});

示例 #1 中的问题是 response 变量无法从其声明的函数外部获取。

示例 #2 中的问题是 axios.get( 是异步的,这意味着它不会像同步函数那样立即获得响应。这意味着 event.returnValue 设置得太晚,响应将不起作用。

解决方法 是用这样的新消息回复:

ipcMain.on("get_scenes", (event, arg) => {
    axios.get("http://localhost:60704/getMovies").then(function (response) {
        event.sender.send('scenes_response', response);
    });
});

然后像这样在渲染器中接收它:

var ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.on('scenes_response', function (evt, messageObj) {
    // messageObj Now contains the response.
    console.log(messageObj);
});

尝试 win.webContetens.send 而不是 event.sender.send

像这样,

ipcMain.on("get_scenes", (event, arg) => {
    axios.get("http://localhost:60704/getMovies").then(function (response) {
        win.webContents.send('scenes_response', response);
    });
});