javascript - Try/catch 块和未处理的承诺异常
问题描述
我想测试我的异步函数查询一个不存在的表。因此,错误是故意产生的。
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:错误:错误:ER_NO_SUCH_TABLE:表“test.x”不存在。
你能告诉我为什么吗?
解决方案
你得到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
在函数上添加 a 。getPosts
只要让它冒泡,并在调用时处理错误,getPosts()
如上所示。
async function getPosts() {
const connection = await dbConnection()
const result = await connection.query('SELECT * FROM x')
await connection.release()
return result;
}
关于您当前的错误,您正在尝试对不存在的表执行查询。
您可以在以下问题中了解更多信息:什么是未处理的承诺拒绝?
推荐阅读
- validation - 表单验证的最佳实践
- python - 用另一个数据帧中的数据替换数据帧中的数据
- excel - 在 VLOOKUP 中选择两个值 (value, table, col_index, [range_lookup])
- api - 如何在另一个解决方案中从 MVC 项目调试 Web API 项目
- php - 如何显示 MS。HTML 中的 Office VML 公式?
- c# - 如何杀死asp.net核心中的线程
- octopus-deploy - “目标”在部署“删除附加文件”上意味着什么
- django - 有没有办法将自定义python脚本的返回值用于django模板?
- c# - Entity Framework Core 使用不明确的列名生成 SQL
- php - Webservice注册“created_by”用户