我设置了以下内容来处理对 SQLite 数据库的查询。 当查询没有错误时,它会按预期执行,并且所有行都会记录到控制台。
当我通过在表名称中添加拼写错误来测试功能时,出现未捕获的异常。 我不知道为什么会这样,我认为异常会由
reject()
处理。 我是 JS 新手,不知道我哪里出错了。 任何帮助表示赞赏。
const sqlite3 = require("sqlite3").verbose();
const dbPath = "db_path";
const db = new sqlite3.Database(dbPath);
const query = (command, method = "all") => {
return new Promise((resolve, reject) => {
db[method](command, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
};
async function getResults() {
const results = await query("SELECT * FROM nonexistant_table");
console.log(results);
}
getResults();
这是我遇到的异常:
node:internal/process/promises:391
triggerUncaughtException(err, true /* fromPromise */);
^
Error: SQLITE_ERROR: no such table: set_master1
--> in Database#all('SELECT * FROM set_master1', [Function (anonymous)])
at D:\test_folder\js_tutorial\main.js:7:15
at new Promise (<anonymous>)
at query (D:\test_folder\js_tutorial\main.js:6:10)
at getResults (D:\test_folder\js_tutorial\main.js:18:25)
at Object.<anonymous> (D:\test_folder\js_tutorial\main.js:21:1)
at Module._compile (node:internal/modules/cjs/loader:1469:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
at Module.load (node:internal/modules/cjs/loader:1288:32)
at Module._load (node:internal/modules/cjs/loader:1104:12) {
errno: 1,
code: 'SQLITE_ERROR',
__augmented: true
}
Node.js v20.18.0
由于 getResults 中的 wait query(...) 调用周围没有 try-catch 块,因此不会处理拒绝,
你的代码应该是
const sqlite3 = require("sqlite3").verbose();
const dbPath = "db_path";
const db = new sqlite3.Database(dbPath);
const query = (command, method = "all") => {
return new Promise((resolve, reject) => {
db[method](command, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
};
async function getResults() {
try {
const results = await query("SELECT * FROM nonexistant_table");
console.log(results);
} catch (error) {
// Error is now caught and handled here
console.error("Error executing query:", error.message);
}
}
getResults();