代码之家  ›  专栏  ›  技术社区  ›  Bango

为什么我的电子事件被延迟到渲染过程?

  •  0
  • Bango  · 技术社区  · 7 年前

    我正在尝试在一个电子应用程序中打开一个切换开关,它启动一个快速服务器,并将一条消息发送回服务器正在运行的应用程序。

    现在发生的事情是,开关被翻转,服务器被打开,但是事件并没有像它应该的那样回到渲染过程。

    取而代之的是,我必须在浏览器中访问我的一个express服务器路由,然后它将发送之前应该发送的日志,以及路由请求附带的新日志。

    索引.js

    const {app, BrowserWindow, ipcMain} = require('electron');
    
    ipcMain.on('log', (event, arg) => {
      mainWindow.webContents.send('log', arg)
    });
    
    ipcMain.on('web-state', (event, current) => {
      current ? Web.turnOff() : Web.turnOn()
      event.sender.send('web-state', Web.isOn() ? true : false);
    });
    

    渲染.js

    window.$ = window.jQuery = require('jquery');
    const {ipcRenderer} = require('electron');
    
    ipcRenderer.on('log', function(event , data) {
      console.log(data);
    });
    
    $('#web-switch').on('click', function(e) {
      var Server = !document.getElementById("web-switch").checked? Web.turnOff() : Web.turnOn();
    });
    

    服务器.js

    const Express = require('express');
    const Web = Express();
    const Logger = require('./logger.js');
    var Server;
    let mainWindow;
    
    function turnOn() {
      return Server = Web.listen(Config.web.port || 4000, function() {
        let str = 'App awakens on port ' + Config.web.port;
        Logger.log(str, t);
      });
    }
    
    module.exports = {
      turnOn: function() {
        return turnOn();
      },
      isOn: function() {
        return Server? Server.address() : false;
      }
    }
    

    logger.js日志

    const {ipcRenderer} = require('electron');
    
    function log(data, level) {
        let str = 'something';
        ipcRenderer.send('log', str);
    }
    
    module.exports = {
        log: function(data, level) {
           log(data,level)
        }
    }
    

    index.html索引

    require('../js/render.js');
    <input type="checkbox" id="web-switch" name="web-switch">
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Bango    7 年前

    我通过编辑 turnOn() 功能 server.js

    function turnOn() {
      Server = Web.listen(Config.web.port || 4000);
      let str = 'App awakens on port ' + Config.web.port;
      Logger.log(str, t);
      return Server;
    }
    

    最好的答案是谁能解释为什么我在回调中进行了日志调用时会出现这样的延迟

    推荐文章