【问题标题】:node.js command line toolnode.js 命令行工具
【发布时间】:2015-02-28 17:14:00
【问题描述】:

我正在用 node.js 编写我的第一个命令行工具。我熟悉 async io 的概念并了解使用它的好处。但是我想知道,因为此工具将执行以下操作:

  1. 执行一些 FS 操作(例如创建文件夹、写入一些文件)
  2. 发出网络请求(例如,将一些东西下载到此文件夹中)
  3. 产生一个结果(意味着一堆文件)
  4. 退出

我真的应该为这些方法使用所有异步版本吗?例如mkdirp() 也可以作为mkdirpSync() 使用(来自fs-extra 模块),所以真正的问题是:

为什么我什至不得不在完成后终止的程序中使用异步函数?并且在应用程序线程被阻塞的情况下没有实际影响?

谢谢。

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    简短回答:在所描述的情况下,您不必费心。

    长答案:这取决于这个应用程序的真正目的是什么。如果那只是快速而肮脏的原型来测试某些东西或向你的老板展示你可以制作节点应用程序 - 使用异步或同步 - 没有人会关心。

    但是,如果您打算将此应用程序还给社区,那么您绝对应该考虑异步方法。如果有人偶然发现您的代码并想要重用它,例如在 gulp/grunt 任务中然后呢?在有人将其重写为异步之前,您的代码将毫无用处。

    此外,正如您提到的,这是您在 node 中的第一个应用程序,因此您应该从一开始就养成正确的习惯,例如在处理文件系统或网络时使用异步函数。

    如果您对异步方法中的所有这些回调感到恼火,请尝试将诸如 Promise 之类的东西合并到您的工作流程中(例如惊人的 Bluebirdq) - 这将帮助您实现非常干净且易于维护完全异步的代码 + 可以用程序化的方式编写!

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      我不是 nodejs 方面的专家,但我确实在 node.js 中开发了部分应用程序。
      如有错误欢迎指正

      为什么您必须费心使用异步函数是当您运行同步脚本时,整个过程会停止。 Nodejs 基本上是一个事件循环,因此当您运行同步函数时,循环会停止,直到同步函数完成,这会破坏其目的。

      如果您的应用程序适用于单个用户,那么在我看来这不会是什么大问题,但如果它适用于多个用户,那么您应该使用异步功能。

      如果您使用同步功能,那么您的情况对于 FS 操作,在此期间您将无法向节点服务器发出任何其他请求。尽管不会花费太多时间,但始终建议使用异步函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 2023-03-26
        • 2011-02-24
        • 2019-03-02
        相关资源
        最近更新 更多