近日,在学习node.js。得知node.js大量的用了回调。先来了解下什么是回调。
回调的意义在于可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。
现在先对比一下阻塞和非阻塞方式:
阻塞:
var fs = require('fs');
var data = fs.readFileSync('../project/TestCallback/input.txt');
console.log(data.toString());
console.log("Program Ended");
input.txt内容如下:
here will show you the block function!
执行结果如下:
非阻塞:
var fs = require("fs");
fs.readFile('../project/TestCallback/inputNonBlock.txt',function(err,data){
if(err){
return console.log(err);
}
console.log(data.toString());
});
console.log("program ended!");
inputNonBlock.txt内容如下:
here will show you the non-block function!
执行结果如下:
这两个例子说明阻塞和非阻塞调用的概念。第一个例子说明程序块,直到它读取该文件,然后只前进到结束程序的地方。在第二个例子中,程序不等待文件读取,但它只是进行打印“Program Ended”,并同时程序无阻塞继续读取文件。
因此,阻挡程序执行在序列,从编程点查看其更容易实现的逻辑,但非阻塞方案并不按顺序执行,这样的情况下一个程序需要使用的任何数据进行处理,它应保持使用式相同的块,使之按顺序执行。