首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子:主过程和渲染过程之间的竞争条件

电子:主过程和渲染过程之间的竞争条件
EN

Stack Overflow用户
提问于 2020-12-12 22:03:02
回答 1查看 337关注 0票数 0

在我的电子应用中,我看到了奇怪的行为。在Windows中,有时呈现程序进程在电子完成初始化之前执行,这将导致启动时出现问题。例如:我在Main.ts文件的构造函数中设置了一个隔离数据库并注册IPC通道,因此据我所知,app.on(“就绪”)事件应该在构造函数完成执行后触发,但有时仅在Windows中,就绪事件甚至在数据库设置之前就会触发,而我的呈现程序进程正在调用数据库以获取MainWindow的默认记录。

我认为这是呈现程序进程和主进程执行之间的竞争条件,有人知道如何修复吗?

Main.ts

代码语言:javascript
复制
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()]);
EN

回答 1

Stack Overflow用户

发布于 2020-12-13 21:19:55

每当电子设置完成时,ready事件就会触发。它与构造函数或init方法无关。来自文档

当电子完成初始化时,发出一次

这听起来像是在说您的createWindow函数依赖于数据库设置函数。在这种情况下,您可以先完成设置:

代码语言:javascript
复制
await SequelizeDB.setup();
await app.whenReady(); // this can replace your on("ready", ...) stuff
Main.createWindow();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65270268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档