首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么只在“顶级程序代码”中使用“承诺”才是安全的?

为什么只在“顶级程序代码”中使用“承诺”才是安全的?
EN

Stack Overflow用户
提问于 2020-09-07 15:20:18
回答 1查看 287关注 0票数 0

make-promises-safe包根据承诺中抛出的错误更改Node.js的默认行为。通常,在Node中,这些未处理的承诺拒绝将被记录下来,但是程序会继续运行。安装了make-promises-safe后,Node.js将在遇到未处理的承诺拒绝时退出。这里的“安全”意味着您的程序不会有秘密的未处理的拒绝,因为未处理的拒绝通常与没有经过适当的清理的资源排列在一起,而这些未清理的资源可能会在一个长期运行的程序中造成问题。

我所理解的一切。但是,这个模块附带了一个警告。

重要的是,该模块仅用于顶级程序代码,而不是可重用模块!

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-07 17:32:20

我认为,如果只是为了澄清reusable modulestop-level program code这两个稍微令人困惑的术语的使用,那么这个警告确实需要一些额外的澄清。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63780374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档