Electron开发者工具无法打开:Sequelize-SQLite代码影响
Electron开发者工具无法打开,Sequelize SQLite连接代码导致阻塞
问题场景
- 系统:Windows 10
- Electron版本:20.0.1
- 现象:调用
webContents.openDevTools()、使用Ctrl+Shift+I快捷键、通过菜单手动打开开发者工具均无响应 - 窗口初始化代码:
const Window = new BrowserWindow({ width: 1200, height: 800, webPreferences: { preload: path.join(__dirname, "..", "preload.js"), }, }); Window.webContents.openDevTools(); Window.loadFile(path.join(__dirname, "../..", "index.html"));
排查发现
注释掉以下Sequelize连接SQLite的代码后,开发者工具可正常打开:
const sequelize = new Sequelize({ dialect: "sqlite", storage: path.join(__dirname, "..", "..", "db.db"), });
原因分析
Sequelize初始化SQLite连接时,同步文件IO操作会阻塞Electron主线程。Electron主线程负责处理窗口事件、UI交互等核心任务,主线程被阻塞后,无法响应打开开发者工具的请求。
解决方案
将Sequelize的初始化逻辑改为异步执行,避免阻塞主线程,以下是两种可行方式:
方式1:异步函数+窗口加载完成后执行
async function initDatabase() { const sequelize = new Sequelize({ dialect: "sqlite", storage: path.join(__dirname, "..", "..", "db.db"), }); // 可选:验证数据库连接状态 try { await sequelize.authenticate(); console.log("数据库连接成功"); } catch (err) { console.error("数据库连接失败:", err); } } // 等待窗口加载完成后再初始化数据库 Window.loadFile(path.join(__dirname, "../..", "index.html")).then(() => { initDatabase(); });
方式2:使用setImmediate延迟执行
// 让主线程先处理完当前任务队列后再初始化数据库 setImmediate(() => { const sequelize = new Sequelize({ dialect: "sqlite", storage: path.join(__dirname, "..", "..", "db.db"), }); });
内容的提问来源于stack exchange,提问作者Quasipickle
相关产品推荐
相关产品推荐

