javascript - 发现 Nodejs Promise
问题描述
我想知道是否有一种方法可以轻松找出我正在使用哪些方法返回承诺。因为我使用了很多库并且不想筛选每个库以找出我是否可以 .then() 或 .catch() 或将我的方法放在 try-catch 块中。
我得到了现在众所周知的:
(节点:23423)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部或拒绝未使用 .catch() 处理的承诺。(拒绝编号:5)
每次发生此错误时,堆栈跟踪都不会指向我的文件中发生错误的行,这让我对我没有正确处理此错误的地方一无所知。为此,我将浏览所有脚本,但我想知道最有效的方法是什么。
解决方案
在这种情况下,Nodejs 会发出unhandledRejection 。
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at:', p);
console.log('reason:', reason);
});
监听这个事件可以让你确定这个 Promise 是在哪里创建的,以及在哪个部分缺少一个await
或.then
/ 。.catch
在编码时,您需要始终确定 API/库是否使用 Promises、回调(如果它是同步的或基于事件的)。每个库都应该对此保持一致,或者至少通过函数的命名来明确。如果图书馆对此不清楚,您应该考虑不使用它。
没有自动的方法来确定缺少then
或try
catch 块的位置。最小化问题的一种方法是创建单元测试并在您的项目中达到 100% 的代码覆盖率。
推荐阅读
- sql - 在 postgresql 中混合 %s 和 {} 占位符
- python - 如何使用 Python 在 MySQL 数据库中存储 API 响应?
- java - bazel构建java库不生成任何类文件
- google-app-engine - 在构建期间使用 gsutil builder 获取 app.yaml 来保护 GAE 环境变量?
- python - 如何自定义奥斯卡地址表单字段?
- c# - 如何在 C# 中解析字符串(带有逗号和末尾的符号,即“3,246,928-”)?
- amazon-web-services - 雅典娜查询问题
- javascript - 无法在 JS 中制作可拖动的表格
- javascript - 如何正确访问 javascript 类值
- javascript - 从表中删除一行并将布尔标志传递给 API,而不删除实际对象