Node.js 基础概念 之 回调函数
Hello大家好,还记得上篇博文中,我们提到Node.js的介绍中提到的一个概念“非阻塞I/O”吗?我记得文章中提到非阻塞的实现方式就是异步编程,而提到异步,就绕不开一个概念,叫回调函数。
回调函数,我们从字面意思理解一下它,就是回头再来调用的函数,是不是?所以说回调函数在完成任务后就会被调用,在Node.js中,使用了大量的回调函数,几乎所有的API都支持回调函数,我截了个Node.js的API截图,大家看看规律:
大家看我上面的截图,有没有发现我勾起来的API都是一对一对的,异步的和同步的传递的参数前面的基本都是一致的,但是异步的都有callback回调函数。
调用异步的API,比如我们截图中的fs模块里的fs.readFile(path[, options], callback)这条API,它就可以实现一遍读取文件,一遍执行其他的命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回,这样在代码执行的过程中,就没有阻塞的操作,这样的好处是可以提高Node.js的性能,处理大量的并发请求。下面我们通过两个例子,来理解一下阻塞和非阻塞代码实现起来是怎样的效果。
阻塞代码示例(同步):
//引入fs模块 var fs = require("fs"); var data = fs.readFileSync('./static/test.txt'); console.log(data.toString()); console.log("程序执行结束!");
非阻塞代码示例(异步):
//引入fs模块 var fs = require("fs"); fs.readFile('./static/test.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序执行结束!");
异步和同步的效果是不是很明显,从上面的截图中,我们可以明显的看出区别。第一个示例是在文件读取完成后才执行程序,二第二个示例不需要我们等待文件读取这个过程,直接运行下面的程序,当文件读取完成后,通过回调函数返回给我们需要的数据。
所以阻塞(同步)是按代码顺序执行的,而非阻塞(异步)是不需要按照代码顺序来执行的,如果我们需要单独处理回调函数的参数,那么把相关的代码写到回调函数里即可。
- 点赞
- 收藏
- 关注作者
评论(0)