make-promises-safe包根据承诺中抛出的错误更改Node.js的默认行为。通常,在Node中,这些未处理的承诺拒绝将被记录下来,但是程序会继续运行。安装了make-promises-safe后,Node.js将在遇到未处理的承诺拒绝时退出。这里的“安全”意味着您的程序不会有秘密的未处理的拒绝,因为未处理的拒绝通常与没有经过适当的清理的资源排列在一起,而这些未清理的资源可能会在一个长期运行的程序中造成问题。
我所理解的一切。但是,这个模块附带了一个警告。
重要的是,该模块仅用于顶级程序代码,而不是可重用模块!
这一警告的目的尚不清楚。为什么模块作者建议人们不要在自己的可重用模块中使用这个模块?
发布于 2020-09-07 17:32:20
我认为,如果只是为了澄清reusable modules和top-level program code这两个稍微令人困惑的术语的使用,那么这个警告确实需要一些额外的澄清。
当我读到警告时,我觉得这是在警告不要在发布到npm的包/模块中使用它。当用户导入需要make-promises-safe包的npm包(可能与错误处理完全无关)时,这将隐式地强加用户可能不知道的错误处理机制。当然,您可以将其添加到自述文件中,但并不是每个人都会彻底阅读这些内容。
正如您在问题的注释部分已经讨论过的,源代码显示它订阅了unhandledRejection事件,但是即使多次要求make-promises-safe (声明方式)的方式可能不那么干净,模块缓存确实应该防止绑定发生不止一次。因此,我不认为这是一个问题。另一方面,如果每个模块都开始需要make-promises-safe,那么事件就会有多个订阅。
那么,结论。我只需要在节点应用程序(fe )的入口文件中使用make-promises-safe。注册为节点web应用程序创建/配置您的http服务器),因此,作为开发人员,您可以控制自己的代码。我不会在任何节点模块(无论是在本地还是在npm上公开)中要求它,并将其留给实现包的用户来处理应用程序中的错误。
https://stackoverflow.com/questions/63780374
复制相似问题