何时使用return或callback
When to use either return or callback?
nodejs中模块的一些方法使用回调(异步),一些方法使用返回(同步)。什么时候最适合使用?你应该考虑哪些事情?性能影响是什么?
一般来说,作为node.js开发人员,您别无选择。如果函数只使用同步库函数,则它可以是同步的并返回值。如果您的函数使用任何来自节点核心或支持库的异步API,那么您的函数也必须是异步的并使用回调。一般规则是任何IO(磁盘、网络、进程)都需要回调。该规则的例外情况是,当您正在编写诸如构建脚本或单用户命令行程序(与网络服务相反)之类的实用程序脚本时,在这种情况下,您可以使用节点核心的同步API。
是否由于性能原因而使用异步?
在node.js本身中,选择异步IO、单线程和单事件循环有两个主要原因:性能(主要是处理多个连接时的效率)和编程风格(主要是因为编写正确的多线程代码比编写正确的基于事件的异步代码更难)。
但在日常编码中,node.js主要用于编写网络服务器,而在使用任何同步IO的网络服务器中,都会严重降低性能(node.js网络服务器中的同步IO违反了使node.js工作的主要原则),因此,我认为所有IO都是异步的,只有在特定情况的非常小的白名单下才可以进行同步IO,例如程序最初启动和加载时(require('foo')
是同步的),或者您正在编写一个不提供网络服务的命令行程序(构建脚本、实用程序等)。
不是完全相同的问题,但你的问题的答案也隐藏在这个问题后面。Javascript的行为与所有其他编程语言一样,并按顺序执行,除非它等待其他服务给它一个响应。它执行以下指令,而不是等待其他服务的响应并阻止下一条指令。这种设计被称为asynchromous
。当您使用任何异步调用时,请使用callback
。否则,您可以使用return
。以下是同步和异步行为的一些场景。
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery if语句返回return wong语句
- 函数在return语句之前返回空对象
- Javascript Return and if/else
- 骨干's Router.execute(callback,args,name)方法获取未定义的名称
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- Angular promise return"未定义的“;值.NET MVC
- Javascript用函数return替换局部变量
- JavaScript中的“return cb()”有缺点吗
- JS-fn()中返回后方括号的含义{return{}[]}
- Error: timers.js:234 callback.apply(timer, args);
- 在promise中返回callback()和callback(
- 为什么javascript在'return false'
- return false不阻止点击
- 当使用return语句时,循环不会中断
- 如何在不使用return的情况下跳过下一个if语句
- return false不停止表单提交
- {React jsx babel es6 webpack}如何在渲染中进行注释(return(//||/**/))
- 何时使用return或callback
- Gulp任务中“return”语句和“callback”引用的用途