You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:51:28