【发布时间】:2019-05-02 22:58:28
【问题描述】:
我正在开发一个 Electron 应用程序,其中一个模块创建一个 BrowserWindow 并且其他模块(它们都在主进程中)可以在窗口完全加载后访问窗口(包括在此期间窗口已关闭的情况)。
我正在 macOS 上使用 Electron 5.0.0。
到目前为止,这是我想出的一个简化版本:
// module mainWindow.js
const { BrowserWindow } = require('electron')
let ready = null
const createWindow = () => {
console.log('creating window')
return new Promise((resolve) => {
let win = new BrowserWindow({
show: false,
})
win.on('closed', () => {
ready = null
})
win.loadFile('renderer.html').then(() => {
win.show()
resolve(win)
console.log('window.load resolved')
})
console.log('window id', win.id)
}
const get = (create) => {
console.log('get')
if (ready) {
console.log('ready')
return ready
} else {
console.log('not ready')
if (create) {
console.log('creating')
ready = createWindow()
return ready
} else {
console.log('rejecting')
return Promise.reject()
}
}
}
exports.get = get
// some other module
const win = require('mainWindow.js')
win.get(true).then((win) => { /* ... */ })
// yet another module
const { app } = require('electron')
const win = require('mainWindow.js')
app.on('browser-window-created', () => {
console.log('app.browser-window-created')
win.get(false).then((win) => {
log('got it')
// ...
}, () => {
log('there is no window')
})
})
在我看来,createWindow() 应该返回一个未解决的承诺(然后存储在ready)在异步创建窗口之前。但我的控制台显示:
get
not ready
creating
creating window
app.browser-window-created
get
not ready
rejecting
window id 1
there is no window
window.load resolved
有没有办法解决这个问题?
【问题讨论】:
标签: javascript node.js electron