0

这个make-promises-safe包改变了 Node.js 关于 Promise 中抛出的错误的默认行为。通常,在 Node 中,这些未处理的 Promise 拒绝会被记录下来,但程序会继续运行。安装后,Node.js 将在make-promises-safe遇到未处理的 Promise 拒绝时退出。这里的“安全”意味着您的程序不会有秘密的未处理拒绝,因为未处理的拒绝通常与未正确清理的资源对齐,而这些未清理的资源可能会导致长时间运行的程序出现问题。

我所理解的一切。但是,此模块带有警告

重要的是这个模块只用于顶层程序代码,而不是可重用的模块!

此警告的目的尚不清楚。为什么模块作者建议人们不要在他们自己的可重用模块中使用这个模块?

4

1 回答 1

1

我认为警告确实可以使用一些额外的澄清,如果只是为了澄清这里稍微令人困惑的术语的reusable modules使用top-level program code

当我阅读警告时,我觉得它是在警告不要在您发布到的包/模块中使用它npm。当用户导入您需要make-promises-safe包的 npm 包(可能与错误处理完全无关)时,这将隐含地强加用户可能不知道的错误处理机制。当然,您可以将其添加到您的 README 文件中,但不是每个人都仔细阅读这些内容。

正如您已经在问题的评论部分中讨论的那样,源代码显示它订阅了该事件unhandledRejection,但即使多次要求make-promises-safe它可能不那么干净,但它的声明方式,模块缓存确实应该防止绑定发生不止一次。所以我不认为这是一个问题。另一方面,如果每个模块当然都开始要求 make-promises-safe,那么该事件将有多个订阅。

所以,结论。我只需要make-promises-safe在您的节点应用程序的入口文件中(fe.app.js/server.js,您的注册为节点 Web 应用程序创建/配置您的 http 服务器),因此,作为开发人员,您可以控制自己的代码。我不会在任何节点模块中要求它(无论是本地的还是公开的npm),并将它留给实现你的包的用户如何处理 HIS 应用程序中的错误。

于 2020-09-07T17:32:20.487 回答