什么是回调?

回调是一个异步等效的功能。在完成特定任务回调函数被调用。 Node大量使用了回调。Node的所有的API都支持回调这样的一种方式。

例如,一个函数读取一个文件可能开始读取文件,并使得下一个指令可以被执行立即返回控制到执行环境。一旦文件I/O完成后,它会调用回调函数,同时传递回调函数,该文件的内容作为参数。因此,有没有堵塞或等待文件I/ O。这使得Node.js高度可扩展,因为它可以处理大量的请求,而无需等待任何函数来返回结果。

阻塞代码例子

创建一个名为input.txt的文件有以下内容的文本

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

创建一个js文件名为main.js里面有如下代码:

var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("Program Ended");

现在运行main.js看到的结果:

$ node main.js

验证输出

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended

非阻塞代码例子

创建一个名为input.txt的文件有以下内容的文本

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

更新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("Program Ended");

现在运行main.js看到的结果:

$ node test.js

验证输出

Program Ended
Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

这两个例子说明阻塞和非阻塞调用的概念。第一个例子说明程序块,直到它读取该文件,然后只前进到结束程序的地方。在第二个例子中,程序不等待文件读取,但它只是进行打印“Program Ended”,并同时程序无阻塞继续读取文件。

因此,阻挡程序执行在序列,从编程点查看其更容易实现的逻辑,但非阻塞方案并不按顺序执行,这样的情况下一个程序需要使用的任何数据进行处理,它应保持使用式相同的块,使之按顺序执行。

 

标签:Node    js    回调    概念

本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:易百教程 [http:/www.yiibai.com]
本文标题:Node.js回调概念
本文地址:http://www.yiibai.com/nodejs/nodejs_callbacks_concept.html

最新文章

  1. 设计模式 之 原型模式(ProtoType)
  2. 在ASP.NET 5中读取配置文件
  3. Angular.js为什么如此火呢?
  4. IIS7.0配置HTTPS安全类型的网站
  5. AndroidStudio KeyMap
  6. Bctf-pwn_ruin-re_lastflower
  7. UVA 10718 Bit Mask 贪心+位运算
  8. Asp.net中Postback及Callback
  9. ReactiveCocoa总结
  10. SET与SPLIT
  11. android 填满手机磁盘空间方法
  12. CentOS 7.0 上安装和配置 VNC 服务器
  13. sqlx使用说明
  14. 项目Alpha冲刺--4/10
  15. Python核心编程 | 装饰器
  16. NLP资料
  17. [mobile angular ui 1.2]桌面环境下如何自动隐藏左侧的sidebar?how to hide left sidebar on desktop browser by default?
  18. 使用pycharm,追求最优的代码。
  19. 第14章 UDP编程(1)_UDP客户端服务器模型
  20. 洛谷P2664 树上游戏(点分治)

热门文章

  1. HTML5 Shiv – 让该死的IE系列支持HTML5吧(转)
  2. Marketplace Client- Download
  3. sizeToFit的用法和用途
  4. Oracle修改被占用的临时表结构
  5. myEclipse修改deploy location
  6. UTF-8和GBK有什么区别?
  7. GUID是什么意思及Guid在sqlserver中的使用
  8. 多线程 - 线程同步锁(lock、Monitor)
  9. UITableViewCell 添加长按手势
  10. [转]Delphi Form的释放和隐藏:free,hide,close