在electronjs中,将异常信息从主进程返回到渲染器进程的推荐方法是什么?例如:不是在下面的主进程中抛出异常,我应该如何更改代码来处理异常并将此信息传递给渲染器进程? 在下面的示例中,用户将输入可能无效的youtube网址。我想处理异常并向用户提供一条消息来检查输入youtube url。
main.js:
exports.getUrlInformation=(arg)=>
{
var url = arg;
var options = [];
ytdl.getInfo(url, options, function(err, urlInformation)
{
if (err) throw err;
mainWindow.webContents.send('UrlInformation', urlInformation);
});
}
index.js:
var {ipcRenderer, remote} = require('electron');
var mainProcess = remote.require("./main.js");
class YouTubeDownloaderForm extends React.Component
{
constructor(props)
{
super(props);
this.state =
{
url: '',
urlsInformation:[]
};
this.handleAddClick = this.handleAddClick.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
this.handleChangeClick = this.handleChangeClick.bind(this);
this.handleUrlChange = this.handleUrlChange.bind(this);
this.updateUrlInformation = this.updateUrlInformation.bind(this);
}
componentDidMount()
{
ipcRenderer.on('UrlInformation', this.updateUrlInformation)
}
componentWillUnmount()
{
ipcRenderer.removeListener('UrlInformation', this.updateUrlInformation)
}
updateUrlInformation(event, arg)
{
var urlsInformation = this.state.urlsInformation;
urlsInformation.push(arg);
this.setState({urlsInformation: urlsInformation});
}
handleAddClick(event)
{
mainProcess.getUrlInformation(this.state.url);
}
答案 0 :(得分:1)
主要流程主要用于创建窗口和访问限制在主流程中的Electron API。在主进程中进行CPU密集型工作也会导致渲染器出现故障,因为渲染器使用主进程与GPU进程通信。
结帐this article,了解主进程和渲染器进程之间的差异以及每个进程应该使用的内容。
可以使用不会阻止它们的异步代码在渲染中实现下载。如果您有真正的CPU密集型工作,则应在Web Workers或额外的渲染器进程中运行。 electron-remote可以使CPU密集型工作的过程变得不那么痛苦。