Node JS / Javascript:Promise,未捕获的异常未由“拒绝”处理

问题描述 投票:0回答:1

我设置了以下内容来处理对 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
javascript node.js exception es6-promise
1个回答
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();
© www.soinside.com 2019 - 2024. All rights reserved.