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

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)
  }
}

当我调用该函数时:



你能告诉我为什么吗?

最佳答案

你得到 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;
}

关于您当前的错误,您正在尝试对不存在的表执行查询。

您可以在以下问题中了解更多信息:What is an unhandled promise rejection?

关于javascript - Try/catch 块和未处理的 promise 异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51175821/

10-15 04:26