【问题标题】:When to use either return or callback?何时使用返回或回调?
【发布时间】:2014-10-20 06:33:11
【问题描述】:

nodejs中模块的一些方法使用回调(异步),一些使用return(同步)。 什么时候是最好的使用时间?你应该考虑哪些事情?以及对性能有何影响?

【问题讨论】:

  • 在执行 i/o 操作时使用回调。

标签: javascript node.js callback return


【解决方案1】:

通常,作为 node.js 开发人员,您没有选择余地。如果你的函数只使用同步库函数,它可以是同步的并返回一个值。如果您的函数使用来自节点核心或支持库的任何异步 API,则您的函数也必须是异步的并使用回调。一般规则是任何 IO(磁盘、网络、进程)都需要回调。该规则的例外情况是当您编写实用程序脚本时,例如构建脚本或单用户命令行程序(而不是网络服务),在这种情况下,您可以使用来自节点核心的同步 API。

是否因为性能原因使用了异步?

在 node.js 本身中,选择异步 IO、单线程和单个事件循环有两个主要原因:性能(主要是处理多个连接时的效率)和编程风格(主要是编写正确的多线程代码比编写正确的基于事件的异步代码更困难)。

但是在您的日常编码中,node.js 主要用于编写网络服务器,并且在使用任何同步 IO 的网络服务器中都会严重降低性能(node.js 网络服务器中的同步 IO 违反了使node.js 工作),所以我认为它的方式是所有 IO 都是异步的,只有在非常小的特定情况白名单下进行同步 IO 才可以,例如当您的程序最初启动和加载时(require('foo') 是同步)或者您正在编写一个不提供网络服务(构建脚本、实用程序等)的命令行程序。

【讨论】:

    【解决方案2】:

    不完全相同的问题,但您的问题的答案也隐藏在this 问题后面。 Javascript 的行为与所有其他编程语言一样,并按顺序执行,除非它等待其他服务给予响应。它不等待其他服务的响应并阻止下一条指令,而是执行以下指令。这个设计被称为asynchromous。当您使用任何异步调用时,请使用callback。否则你可以使用returnHere 是一些同步和异步行为的场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2018-08-15
      • 2018-07-29
      • 1970-01-01
      相关资源
      最近更新 更多