- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 npm 中的第 3 方包,该包又连接到 IP 地址 X.X.X.X 上的某些外部 API,并且崩溃并出现以下错误。原因很清楚,网络暂时瘫痪,然后我的整个程序就停止了:
events.js:177
throw er; // Unhandled 'error' event
^
Error: connect ENETUNREACH X.X.X.X:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
at Socket.socketErrorListener (_http_client.js:410:9)
at Socket.emit (events.js:200:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:84:9) {
errno: 'ENETUNREACH',
code: 'ENETUNREACH',
syscall: 'connect',
address: 'X.X.X.X',
port: 80
}
我故意不说 npm 上的哪个模块导致了问题,因为我无法控制第 3 方模块作者正在做什么。如果我向他们提示,他们可能会也可能不会修复它,但我的编码生活需要继续。即使我调用的任何代码存在编码错误,它也不应该完全使我的调用脚本崩溃。应该有一种方法可以让我在它完全限制我的风格之前捕获它。
我尝试过的:我仔细地使用错误处理,try
/catch
围绕任何第3方异步库调用等。示例:
var ThirdPartyModule = require("thirdPartyModule");
try {
await ThirdPartyModule.doIt("some", "params");
} catch (err) {
console.log("Ok so the module call failed. Let's try something else here, but don't abort my script please!");
}
catch
不执行任何操作。每次调用模块并发生连接错误时,它都会用上面的“throw er;”完全淹没我的整个程序。
我的问题是,我可以在对库的调用周围编写哪些额外的“包装”代码来“捕获”不属于我的代码中的任何崩溃,以便我的代码继续执行?
我仍然是 Nodejs 中的菜鸟,所以我认为我错过了一些在这里工作的更大的 NodeJS 概念。我来自 C++ 或 Java,所以每当这些语言中出现崩溃时,我总是可以 catch() 它,所以我很困惑模块如何在我的主脚本中“转义”try/catch。
请注意,我并不是在寻找诸如“您应该确保始终连接到互联网,这就是 ENETUNREACH 的意义所在。”之类的答案。相反,我试图了解如何成为我所调用的“子模块”的主人,即捕获它们的错误,或者如果我不能成为它们的主人,我想了解为什么我想要的东西在 Nodejs 中是不可能的。
谢谢!
编辑:在下面链接的类似问题中,评论者建议添加一个 process.on("uncaughtException")
处理程序。我现在就尝试一下。
如果这是正确的解决方案,请将其作为答案发布并解释基本概念。为什么我不能仅仅依靠 try
/catch
这就是改革后的 Java 程序员会做的事情? npm 上模块的作者做了什么才能不将错误传递到他的异步函数中的链上?
编辑2:也许我的问题最终与Catch all uncaughtException for Node js app重复。 - 我希望能得到一个解释,为什么某些深层的崩溃必须像这样在全局范围内被捕获,并且不会渗透到调用者链上。是否是因为第 3 方编码器犯了错误,并且未能将其代码中可能出现的所有可能问题转换为异步代码中正确的 throw
?
编辑 3:好的,我设法找到了问题所在。我使用的图书馆不是罪魁祸首。它天真地调用并 promise 了一个第四方库(也在 npm 上),该库通过 http.request() 连接到服务器。只是该第四方库的作者忘记安装 request.on('error')
回调,因此当互联网连接出现问题时(永远不会发生,对吧!),就会出现无法处理的情况。第三方库永远不会从第四方库获得预期的“错误”回调,因此永远无法 promise 该错误情况。相反,错误在 nodejs ether 中未得到处理,导致我的整个脚本崩溃。所以有...
最佳答案
绝对不对库内代码的结构做出任何假设,您将陷入以下困境:
process.on('uncaughtException', function (err) {
//do something
});
原因是:如果库自始至终都使用 Promise,那么 try/catch block 就会捕获它。库内抛出错误的部分很可能位于回调内。
异步代码的最佳实践应该是向回调返回错误,返回被拒绝的 Promise 或在异步 block 内抛出,并且永远不要使用回调或原始 Promise 在函数内抛出。然而,这似乎极有可能正是正在发生的事情。此时没有办法优雅地处理错误,只能捕获所有uncaughtException
。
本质上,在 Promise 或传统异步回调中抛出错误的情况下,代码会抛出同步错误,并且没有同步 try/catch block 来处理它。而且您无法从模块外部注入(inject)。
所以简而言之,该错误没有“适当”的机制可以处理。第三方模块编写者应该感到羞耻。
关于node.js - 如何在别人的API代码中 "catch"the throw er;//Unhandled 'error'事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59463127/
在我的公司,我们使用 SVN,但希望将来无缝切换到 GIT。这就是我开始学习 git-svn 的原因,它有望作为 svn 存储库的前端。 我尝试通过以下设置使用它: SVNREPO - 主 svn 存
在我正在编辑的手册页中,我看到以下内容: .Er ENOENT ENOENT 这到底是什么意思?我查看了 man(1) 手册页,但没有看到任何有关如何读取原始文件的内容。 最佳答案 有关 .Er 的详
我需要为考试练习 ER 建模,请记住,不会有任何第三方工具,它必须在纸上手动完成:(有什么建议可以避免错误吗? 最佳答案 我确信您已经在网络上进行了一些搜索。只是一些提示: 不要忘记注释您的基数(一比
根据这些说明,我正在尝试创建一个 ER 模型。和 这些说明: Total Escapes has a wide variety of tours on offer to its customers.
我使用陈表示法和理由制作了一个 ER 图。有人可以检查我的做法是否正确吗? 除此之外我还有一些其他问题: 为什么弱实体总是只有一和一? (粗箭头形式分配给has) 如何在 ER 图中处理 20 倍到
我做了一个项目,本质上是一个在线书店,人们可以在那里购买书籍并下订单。 我的数据库包含各种表,例如: 用户 user_shipping_address user_ payment_mode user_
我想创建这个,但我不知道它到底是怎样的。我的猜测是,它可能像 Employee 表中的外键一样工作,但同样,我不明白如何创建这样的东西。如果这个问题已经得到解答,我很抱歉,但我不知道如何搜索。 最佳答
假设您有一个带有 read 方法的 FileReader 类。 我知道类级别的属性可以证明拥有一个实例是合理的。但是,是什么阻止了通过将这些相同的属性拉入相应的 static read 方法的范围内来
所以我正在设计一个涉及电影、剧院、销售产品/纪念品的摊位的关系数据库。这是让我感到困惑的问题的一部分: “... 电影院由标识符、名称、地址(街道、市、省),以及影院的银幕总数。 ... 特许摊位是在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我正在做一个项目,我在图像中有一个特征,描述为一组 X 和 Y 坐标(每个特征 5-10 个点),这是该特征独有的。我还有一个包含数千个特征的数据库,每个特征都有相同类型的描述符。结果如下所示: my
我有以下问题: 仅使用二元关系,构建实体关系图用于以下描述。包括实体标签、主键字段、关系标签和关系的多重性。 “一家公司经营着几个汽车维修和服务车库,每个车库都有自己的唯一编号 (gargNo)。当车
最重要的是,我正在寻找一种快速(er)方法来多次设置/索引矩阵: for (i in 1:99000) { subset.data summaryRprof("subsetMatrix.out"
对于一个小项目,我正在为一个简单的股票跟踪应用程序创建一个实体关系图。 用户故事 产品由产品供应商销售。产品由办公室订购并交付给他们。可能需要一次或多次交货才能完成订单。该办事处订购的这些产品依次交付
当我尝试按照此处的说明 ( https://github.com/beyondcode/laravel-er-diagram-generator ) 操作时,出现以下错误。 Symfony\Compo
对不起,如果这太简单了,但我最近发现了很多关于 ER 建模的文档,但所有这些似乎都跳过了实际的实现,我只是想澄清一下。 子类型是否只是带有父类(super class)型的外键以及属于子类型的属性的第
我正致力于从 ER 图创建数据库,但我认为我的某些主键和外键不正确。我认为它们不正确的表是部分中的主键和注册表中的 FK 和 PK。我也不认为我正确地执行了我的 FK 约束,因此我无法检测到引用完整性
对于给定的 request-id 第三方服务会生成以下内容 字符串类型的推荐列表(通常为 5-10 条推荐) 字符串类型的治疗列表(通常为 5-10 次治疗) 字符串类型的服务列表(通常为 5-10
我正在学习如何在 MySQL 中创建数据库,理论部分之一是开发 ER 图。我在制作自己的项目时真的需要它吗?如果我想创建一个,我是在关系正常化之后创建它吗? 最佳答案 1).您并不被要求这样做。但它绝
我正在学校做这个项目,关于超市数据库,我有一个需要表示的限制,但我不知道如何表示。这是限制: “每个产品都有一个命名类别。没有类别的产品,每个产品只属于一个类别。 一个类别可以包含在另一个类别(子类别
我是一名优秀的程序员,十分优秀!