正确的方法将异常信息从主进程返回到渲染器进程

时间:2018-02-13 06:25:53

标签: javascript reactjs electron

在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);
  }

1 个答案:

答案 0 :(得分:1)

主要流程主要用于创建窗口和访问限制在主流程中的Electron API。在主进程中进行CPU密集型工作也会导致渲染器出现故障,因为渲染器使用主进程与GPU进程通信。

结帐this article,了解主进程和渲染器进程之间的差异以及每个进程应该使用的内容。

可以使用不会阻止它们的异步代码在渲染中实现下载。如果您有真正的CPU密集型工作,则应在Web Workers或额外的渲染器进程中运行。 electron-remote可以使CPU密集型工作的过程变得不那么痛苦。