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

NodeJS中SQLite查询Promise未捕获异常未被reject处理问题

问题分析

你遇到的未捕获异常,核心原因是没处理async函数里await抛出的Promise拒绝,也没给顶层的Promise调用加错误处理。

虽然你在query函数里用reject(error)处理了SQL错误,但getResults里用await时,这个被reject的Promise会转化为异常,而你没通过try/catch捕获它;同时直接调用getResults()后,也没通过.catch()处理未捕获的Promise拒绝。

解决方案

可以通过两种方式修复:

方式1:在async函数内用try/catch捕获

修改getResults函数,用try/catch包裹await逻辑:

async function getResults() {
  try {
    const results = await query("SELECT * FROM nonexistant_table");
    console.log(results);
  } catch (error) {
    // 处理错误,比如打印详细信息
    console.error("查询出错:", error);
  }
}
getResults();

方式2:给顶层Promise调用添加.catch()

如果不想在async函数内加try/catch,可以在调用getResults()时直接链式调用.catch():

async function getResults() {
  const results = await query("SELECT * FROM nonexistant_table");
  console.log(results);
}
getResults().catch(error => {
  console.error("查询出错:", error);
});

额外优化:数据库连接的错误处理

另外,创建sqlite3.Database实例时,建议添加错误处理回调,避免数据库连接失败的情况未被捕获:

const db = new sqlite3.Database(dbPath, (error) => {
  if (error) {
    console.error("数据库连接失败:", error);
  } else {
    console.log("数据库连接成功");
  }
});

这样修改后,SQL错误就会被正确捕获和处理,不会再出现未捕获异常。

内容的提问来源于stack exchange,提问作者Sam WB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:31:02