try/catch块和未处理的promise异常

9fkzdhlc  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(372)

我想测试我的异步函数查询一个不存在的表。因此,错误是故意产生的。

async function getPosts() {
  try {
    const connection = await dbConnection()
    const result = await connection.query('SELECT * FROM x')
    await connection.release()
    console.log(result)
  }
  catch(ex) {
     throw new Error(ex)
  } 
}

当我调用该函数时:
UnhandledPromisejectionWarning:错误:error:er\u no\u这样的表:表“test.x”不存在。
你能告诉我为什么吗?

bnl4lu3b

bnl4lu3b1#

嗨,过去的我自己!
您的控制台显示一个未处理的错误,因为在catch块中,您(我)愚蠢地重新抛出了一个javascript错误?
把它拿走 throw new Error(ex) 从你的 catch 用一些错误处理逻辑来改变它。

n3schb8v

n3schb8v2#

你越来越 UnhandledPromiseRejectionWarning 因为你没有添加 .catch 处理程序到 getPosts() ```
getPosts()
.then(console.log)
.catch(console.error); // You're missing this

或使用 `async/await` ```
try {
    const posts = await getPosts();
    console.log(posts);
} catch(e) { // Missing this
    console.error(e); 
}

无需添加 try/catch 在你的 getPosts 如果要在不做任何修改的情况下再次抛出错误,则返回函数。只是让它冒泡,并处理错误时调用 getPosts() 如上图所示。

async function getPosts() {

    const connection = await dbConnection()
    const result = await connection.query('SELECT * FROM x')
    await connection.release()
    return result;
}

关于当前的错误,您正在尝试对不存在的表执行查询。
您可以在下面的问题中了解更多:什么是未处理的拒绝承诺?

相关问题