我正在用node.js编写我的第一个命令行工具。我熟悉异步io的概念并理解使用它的好处。我想知道,因为这个工具将执行以下操作:
我真的应该使用这些方法的所有异步版本吗?例如,mkdirp()
也可以mkdirpSync()
(来自fs-extra
模块),所以真正的问题是:
为什么我甚至不得不在完成后终止的程序中使用异步函数?并且在应用程序线程被阻止的情况下没有实际影响吗?
感谢。
答案 0 :(得分:3)
简短回答:在描述的情景中,您不必费心。
答案很长:这取决于这个应用程序的真正目的。如果那只是快速和肮脏的原型来测试某些东西或向老板展示你可以制作节点应用程序 - 使用异步或同步 - 没人会关心。
但是如果你计划将这个应用程序交还给社区,你一定要考虑异步方法。如果有人会偶然发现你的代码和将要重复使用它,例如在gulp / grunt任务然后呢?您的代码将无用,直到有人将其重写为异步。
此外,正如您所提到的,这是您在节点中的第一个应用,因此您应该从开始进入适当的习惯,例如在处理文件系统或网络时使用异步功能。
如果您对异步方法中的所有回调感到恼火,请尝试将类似承诺的内容(例如,令人惊叹的Bluebird或q)纳入您的工作流程中 - 这将有助于您实现清洁&易于维护的代码完全异步+可以用程序风格编写!
希望这会有所帮助!
答案 1 :(得分:1)
我不是我在nodejs方面的专家,但我确实在节点中开发了我的部分应用程序。
如果我错了,欢迎你纠正我
为什么你不得不打扰使用异步功能是当你运行同步脚本时整个过程停止。 Nodejs基本上是一个事件循环,因此当你运行一个同步功能时,循环停止,直到同步功能完成,这会破坏其目的。
如果您的应用程序是针对单个用户的,那么在我看来它不会是一个大问题,但如果它适用于多个用户,那么您应该使用异步功能。
在您的情况下,如果您使用FS操作的同步功能,然后在此期间您将无法向节点服务器发出任何其他请求。即使它不会花费太多时间,但始终建议使用异步函数。