Как электронная структура может обеспечить связь как запрос Ajax? - PullRequest
0 голосов
/ 27 марта 2019

ipcRenderer.sendSync может заблокировать весь процесс рендеринга. ipcRenderer.send нужно использовать ipcRenderer.on для прослушивания асинхронного возврата событий.

Так есть ли способ сообщить, что данные могут быть возвращены как обратный вызов непосредственно там, где они были запрошены?

Это может выглядеть примерно так: ipcRenderer.sendAsync('eventName', args, callback), или другими способами.

ipcRenderer.on("onMessage", (e, {cbName, data}) => { 
  switch (cbName) {
    case 'foo1':
      foo1(data)
      break
    case 'foo2':
      foo2(data)
      break
    case 'foo3':
      foo2(data)
      break
    // more
    default:
      break
  }
})

ipcRenderer.send("message", { cbName, /* other args */ })

1 Ответ

0 голосов
/ 27 марта 2019

То, что вы просите, если я правильно понимаю, это передать обратный вызов из процесса визуализации в основной процесс и получить обработчик в основном вызове с ответом, а не отправлять его обратно.

так, вместо того чтобы делать это:

main.js:

ipcMain.on("message", (e, arg) => {
    e.sender.send("onMessage", "response");
});

renderer.js:

ipcRenderer.send("message", 1);
ipcRenderer.on("onMessage", (e, response) => { });

вы хотите сделать это:

main.js:

ipcMain.on("message", (e, arg, callback) => {
    callback("response");
});

renderer.js:

function callback(response) { }
ipcRenderer.send("message", 1, callback);

Тогда нет, вы не можете этого сделать, потому что вы не можете передавать функции в такие процессы, как этот.Даже если вы .toString() функция и затем воссоздаете функцию в главном процессе через new Function(...), вы будете выполнять ее в контексте основного процесса, а не средства визуализации, и, вероятно, вы захотите выполнить ее вПроцесс рендеринга.

Использование e.sender.send(...) - идиоматический способ отправки сообщений другому процессу, и вы не должны уклоняться от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...