2 回答
TA贡献1829条经验 获得超7个赞
问题似乎是该事件是同步触发的,因此它在函数完成执行之前运行,并且ready =尚未运行。要解决此问题,您必须推迟窗口的创建:
return new Promise((resolve, reject) => {
setTimeout(() => {
//...
});
});
您还可以在分配给readyinside时使用另一个promise来推迟get:
ready = Promise.resolve().then(createWindow);
另外,您可以ready在创建窗口之前重新分配,因为您必须resolve从回调中公开该窗口:
let resolve;
ready = new Promise(it => resolve = it);
// create window ...
// somewhen ...
resolve(win);
TA贡献1874条经验 获得超12个赞
您的问题是 let win = new BrowserWindow立即触发'browser-window-created'事件,因此在其回调中您找不到任何待处理的Promise。
因此,我建议您重组代码。
例如app.on('browser-window-created')可以用来获取创建的BrowserWindow。将监听器添加到'did-finish-load'BrowserWindow的webContents中,您将获得与返回的Promise完全相同的回调(loadFile会为该事件解析)
app.on('browser-window-created', (event, window) => {
console.log('app.browser-window-created')
window.webContents.on('did-finish-load', () => {
console.log('got it')
// ...
})
window.webContents.on('did-fail-load', () => {
console.log('there is no window')
})
})
添加回答
举报
