在socket.emit中发送时未收到win.webContents.send

时间:2019-05-03 22:00:56

标签: vue.js socket.io electron

我正在Electron内部运行Vue,并使用Socket.io将其连接到Node(Express)服务器。

当客户端连接到服务器时,将发出数据请求,并通过回调函数将其返回。在回调函数中,我尝试使用win.webContents.send通过Electron的IPC发送数据,但未在相应的ipcRenderer.on中接收到数据。

我在socket.emit之外(在'did-finish-load'内部)还有另一个win.webContents.send,它被ipcRenderer接收,所以我怀疑它与异步有关。我要去哪里错了?

Electron.js

const { app, BrowserWindow, Menu } = require('electron')
var io = require('socket.io-client')

...

let win

function createWindow () {
    win = new BrowserWindow({ width: 800, height: 600 })

    win.loadFile('dist/index.html')

    //win.webContents.openDevTools()

    win.on('closed', () => {
        win = null
    })

    win.on('ready-to-show', () => {
        win.maximize();
      });

    win.webContents.on('did-finish-load', () => {
        win.webContents.send('DATA', 'test'); // This works
    });

}

...

var socket = io.connect('http://127.0.0.1:3000', {
  reconnectionDelay: 100
});

socket.on('connect', () => {
  console.log('Connected');

  socket.emit('GET_DATA', function(response) {
    console.log('Received:');
    console.log(response);
    win.webContents.send('DATA', response); //This doesn't seem to work...
  });
});

Vue的main.js

const { ipcRenderer } = window.require('electron');

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

ipcRenderer.on('selectView', (e, arg) => {
...
});

ipcRenderer.on('DATA', (e, arg) => {
  console.log('THIS IS NOT SHOWING UP WHEN SENT INSIDE SOCKET.EMIT');
});

0 个答案:

没有答案