Node.js 异步编程的直接体现就是回调。异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。

例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

回调函数一般作为函数的最后一个参数出现:

function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }

一.阻塞代码示例

创建一个文件 input.txt ,内容如下:

NodeJS回调示例

创建 main.js 文件, 代码如下:

var fs = require("fs");var data = fs.readFileSync('input.txt');console.log(data.toString());
console.log("程序执行结束!");

以上代码执行结果如下:

$ node main.js
NodeJS回调示例程序执行结束!

二.非阻塞代码示例

创建 main.js 文件, 代码如下:

var fs = require("fs");fs.readFile('input.txt', function (err, data) {if (err) return console.error(err);console.log(data.toString());
});console.log("程序执行结束!");

以上代码执行结果如下:

$ node main.js
程序执行结束!
NodeJS回调示例

三.小结

以上两个示例直观地反应了阻塞与非阻塞调用的不同。第一个实例在文件读取完后才执行完程序。 第二个实例我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。

转载于:https://www.cnblogs.com/johnvwan/p/9598381.html

Node.js中的回调解析相关推荐

  1. 在Node.js中使用事件,监听器,定时器和回调

    Node.js通过其强大的事件驱动模型提供了可扩展性和性能,本篇文章的重点是理解该模型,以及它是如何不同于大部分Web服务器采用的传统线程模型的.了解事件模型至关重要,因为它可能迫使你改变设计应用程序 ...

  2. c语言socket句柄函数传递,通过源码解析 Node.js 中进程间通信中的 socket 句柄传递...

    在 Node.js 中,当我们使用 child_process 模块创建子进程后,会返回一个 ChildProcess 类的实例,通过调用 ChildProcess#send(message[, se ...

  3. node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序

    node mongoose by Arun Mathew Kurian 通过阿伦·马修·库里安(Arun Mathew Kurian) 如何使用Express,Mongoose和Socket.io在N ...

  4. Day 27: Restify —— 在Node.js中构建正确的REST Web服务

    今天决定学一个叫做restify的Node.js模块.restify模块使得在Node.js中写正确的REST API变得容易了很多,而且它还提供了即装即用的支持,如版本控制.错误处理.CORS和内容 ...

  5. ENSP如何开启服务器的http_如何使用HTTP模块在Node.js中创建Web服务器(上)

    当你在浏览器中查看网页时,其实是在向互联网上的另一台计算机发出请求,然后它会将网页提供给你作为响应.你通过互联网与之交谈的那台计算机就是Web服务器,Web服务器从客户端(例如你的浏览器)接收HTTP ...

  6. 【nodejs原理源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    [摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...

  7. 如何在Node.js中处理POST数据?

    如何提取Node.js中 HTTP POST方法发送的表单数据( form[method="post"] )和文件上传? 我已经阅读了文档,谷歌搜索并没有发现任何东西. funct ...

  8. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

  9. node.js中模块_在Node.js中需要模块:您需要知道的一切

    node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...

最新文章

  1. 【 Linux 】Vim学习指南
  2. html追加行clone,jQuery - 使用.clone()方法克隆拷贝元素
  3. 应用域名改造-https证书部分
  4. 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别
  5. Linux服务器安装svn
  6. 编译器后端,寄存器分配算法
  7. GitHub 十大顶级 JavaScript 开源项目
  8. 为什么我花了三个半月准备的面试还是砸了?附 iOS 开发者求职攻略
  9. 【转】plist文件的内容清空
  10. 快速切换ip没必要用工具
  11. excel怎么设置选项选择_使用Excel选项按钮选择答案
  12. [学习笔记]UnityShader入门精要_第12章_屏幕后处理效果
  13. 资料共享库 | ApacheCN(apache中文网)
  14. Canvas学习:绘制箭头
  15. 打造在线简历生成器,让面试官眼前一亮……
  16. 微型计算机的基本储存单位,计算机内存储器中的基本存储单位是什么
  17. 港美股系统开发软件开发之证券交易软件供应商对比
  18. GUPNet:基于几何不确定性映射的单目3D检测网络(ICCV2021)
  19. K210人脸识别+断电保存
  20. 专题:手把手学习硬件基础------15、TTL和CMOS

热门文章

  1. Linux系统xshell常用指令,linux系统安装数据库时,xshell工具常用MySQL(5.5)相关命令...
  2. mysql 挑战握手协议_什么是挑战握手认证协议协议,在现实中有哪些应用?
  3. dev 命令行参数调用_云开发·云调用生成小程序码
  4. webpack html转成js,WebPack的基础学习
  5. 笑脸符号怎么存入mysql_让MySql支持Emoji表情存储
  6. python文字识别库_python做文字识别一行代码都不用!
  7. Django框架基础知识点
  8. springMVC 统一异常处理异常处理类的使用
  9. mysql navicat编码保持一致不乱码
  10. 《好未来编程题》n个数里最小的k个