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
相关产品推荐
相关产品推荐

