gpt4 book ai didi

node.js - Electron :主进程与渲染进程之间的竞争条件

转载 作者:行者123 更新时间:2023-12-03 12:38:16 24 4
gpt4 key购买 nike

在我的Electron应用程序中,我看到了奇怪的行为。在Windows中,有时渲染器进程会在Electron的初始化完成之前执行,这会在启动时引起问题。
例如:我建立了一个序列数据库,并在Main.ts文件的构造函数中注册IPC channel ,据我所知,一旦构造函数完成执行,就应该触发app.on('ready')事件,但有时在Windows OS中仅在数据库建立之前就触发了就绪事件,而我的渲染器进程正在调用数据库以获取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()]);

最佳答案

每当Electron设置完成时,就会触发ready事件。它与构造函数或init方法无关。从docs:

Emitted once, when Electron has finished initializing


听起来您好像在说 createWindow函数依赖于数据库设置函数。在这种情况下,您可以先进行设置:
await SequelizeDB.setup();
await app.whenReady(); // this can replace your on("ready", ...) stuff
Main.createWindow();

关于node.js - Electron :主进程与渲染进程之间的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65270268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com