Я запускаю Vue внутри Electron и подключаю его к серверу Node (Express) с помощью Socket.io.
Когда клиент подключается к серверу, запрос данных отправляется и возвращается через обратный вызовфункция.Внутри функции обратного вызова я пытаюсь отправить данные через IPC Electron, используя win.webContents.send, но они не получены в соответствующем ipcRenderer.on.
У меня есть другой win.webContents.send вне сокета.emit (внутри 'did-finish-load') и он получен 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...
});
});
main.js Vue
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');
});