在我的电子应用中,我看到了奇怪的行为。在Windows中,有时呈现程序进程在电子完成初始化之前执行,这将导致启动时出现问题。例如:我在Main.ts文件的构造函数中设置了一个隔离数据库并注册IPC通道,因此据我所知,app.on(“就绪”)事件应该在构造函数完成执行后触发,但有时仅在Windows中,就绪事件甚至在数据库设置之前就会触发,而我的呈现程序进程正在调用数据库以获取MainWindow的默认记录。
我认为这是呈现程序进程和主进程执行之间的竞争条件,有人知道如何修复吗?
Main.ts
export class Main {
private mainWindow: BrowserWindow;
static instance: Main;
public async init(ipcChannels: IpcChannelInterface[]) {
Main.instance = this;
// Registering the IPC Channels
await this.registerIpcChannels(ipcChannels);
var config = require('../../package.json');
app.setAsDefaultProtocolClient(config.build.protocols.name);
app.setAppUserModelId(config.build.appId);
app.on('ready', Main.createWindow);
app.on('window-all-closed', Main.onWindowAllClosed);
app.on('activate', Main.onActivate);
//Below statement setup the database
await SequelizeDB.setup();
}
}
(new Main()).init([new IpcChannel1(), new IpcChannel2()]);发布于 2020-12-13 21:19:55
每当电子设置完成时,ready事件就会触发。它与构造函数或init方法无关。来自文档
当电子完成初始化时,发出一次
这听起来像是在说您的createWindow函数依赖于数据库设置函数。在这种情况下,您可以先完成设置:
await SequelizeDB.setup();
await app.whenReady(); // this can replace your on("ready", ...) stuff
Main.createWindow();https://stackoverflow.com/questions/65270268
复制相似问题