1、回调一般作为一个参数中写一个函数来实现的,格式如下:
function foo1(name, age, callback) { } function foo2(value, callback1, callback2) { }
* callback 代表回调函数
举例如下:
例1:阻塞代码实例 (无回调时)
1、创建一个文件 input.txt ,内容如下:菜鸟教程官网地址:www.runoob.com
2、创建 main.js 文件, 代码如下:
var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("程序执行结束!");
以上代码执行结果如下(按顺序执行):
$ node main.js 菜鸟教程官网地址:www.runoob.com 程序执行结束!
例2:非阻塞代码实例(有回调时)
1、创建一个文件 input.txt ,内容如下:菜鸟教程官网地址:www.runoob.com
2、创建 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 程序执行结束! 菜鸟教程官网地址:www.runoob.com
注:以上两个实例我们了解了阻塞与非阻塞调用的不同。第一个实例在文件读取完后才执行完程序。 第二个实例我们不需要等待文件读取完(即在以下程序全部执行完成后再执行有回调的第二个参数),这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。
因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。
例3: $p.hide('slow',function(){ 函数内容 }); ===这个是在第一个参数实现后,再调用第一个参数,即函数
2、回调的原理:
例1:var fs = require('fs');
fs.readFile('somefile.txt','utf8',funtion(err,data){
if (err) throw err;
console.log(data);
});
执行步骤:
1、fs 模块请示;
2、将文件系统上的路径作为第一个参数;
3、第二个参数表示文件编码;
4、将回调函数作为第三个参数;
5、回调函数的第一个参数是err,表示文件读取有错时调用
6、回调函数的第二个参数是data,即显示文件内容;