彻底理解Node.js的回调函数
Node.js 回调函数
Node.js 异步编程的直接体现就是回调。
异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了.
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。
通常在使用某些Node的api的时候,我们需要先require相应的模块(这个过程可以理解为java中的import),而对于文件读取操作,我们首先需要require('fs')这个Moudle,fs的意思就是File System的简称,然后可以使用其中的API进行文件的读写操作.
首先我们看一下官网关于File System的描述:
File I/O is provided by simple wrappers around standard POSIX functions. To use this module do require('fs'). All the methods have asynchronous and synchronous forms.
file的I/O操作是基于标准的可移植操作系统接口进行的封装,使用这个模块需要使用require('fs')进行模块的引入,这个模块所有的方法都提供了同步,异步两种模式.
The asynchronous form always takes a completion callback as its last argument. The arguments passed to the completion callback depend on the method, but the first argument is always reserved for an exception. If the operation was completed successfully, then the first argument will be null or undefined.
异步的模式通常使用一个完成后的回调函数作为他的最后一个参数,这个方法提供完成回调后参数,但是第一个参数通常是一个异常.如果这个操作成功执行,那么第一个参数的值会是null或者undefined.
When using the synchronous form any exceptions are immediately thrown. You can use try/catch to handle exceptions or allow them to bubble up.
当使用同步的模式时,有任何异常都会立即抛出,我们可以使用try/catch进行捕获,或者让此异常向上传递.
扯了那么多,是时候上代码了.
var fs = require("fs");//首先引入fs模块
var fileName = 'D:\\firstnode.txt';//定义文件路径
console.log("同步执行开始!");
var data = fs.readFileSync(fileName);
console.log(data.toString());
console.log("同步执行结束!\n");
console.log("异步执行开始!");
fs.readFile(fileName, function(error,data){
console.log(error);
if(error){
console.log(error);
}else{
console.log(data.toString());
}
})
console.log("异步执行结束!");
控制台的执行结果:
同步执行开始!
my first node.js
同步执行结束!
异步执行开始!
异步执行结束!
null
my first node.js
根据程序运行结果我们可以看出同步和异步的区别,同步的话读取文件信息会阻塞当前代码执行,而异步则不会.
最后总结一下:对于Node中的异步回调我们可以理解为java中的接口回调,都是告诉别人你发生什么事情要执行什么方法,然后当事情发生之后就调用我们给定的方法.
共同学习,写下你的评论
评论加载中...
作者其他优质文章