理解Node.js的回调(Callback)

一、回调

回调(Callback)是javascript中常用的使用方法,简单而言,就是:函数作为参数传递到另一个函数中,然后被调用。

同样,在Node.js中,比如I/O操作发生的地方,经常使用回调模式。通过在回调函数中嵌套回调函数,可以控制事情的顺序(使用回调的根本出发点),比如从数据库读取数据后通过回调用另一个函数处理数据。

个简单的栗子

var fs=require('fs'); //请求调用fs(filesystem)模块,在脚本使用
fs.readFile('filename.txt','utf8',function(err,data){  //前两个参数分别为路径和文件编码,第三个参数为回调函数
if(err) throw err; //如果读取文件有误,抛出错误
console.log(data); //否则,来自文件的数据会显示在控制台上
});

另一个例子是使用http模块创建http客户端和服务器,http.get()方法用来请求Web服务器并获得相应数据。

回调函数的调用发生在远程服务器发回响应之后,由于代码必须进入网络获取数据,无法确切知道数据何时返回。

回调可以让代码在其他事件发生时能够运行,当事件发生时,回调被触发(fired),从而导致回调函数被调用。

var http=require('http'); //请求http模块

http.get({host:'baidu.com'},function(res){  //参数1获取主页,参数2为回调函数,其参数响应
	console.log("Got response:"+res.statusCode); //远程服务器返回响应时,触发此匿名回调函数
	}).on('error',function(e){
	console.log("Got error:"+e.message);
});


二、同步阻塞和异步非阻塞

所谓同步,即每次执行一个操作,在一个操作完成之前,代码的执行会被阻塞,无法继续下一个操作。所谓异步(非阻塞),指的是基于回调、允许脚本并行执行操作的方法,操作结果会在事件发生时由回调来处理,从而无需等待某个操作的结果继续下一步。

而为了在网络和I/O操作中处理并发,Node.js运行在单一进程并使用异步编码风格。


三、事件循环

时间循环可以将回调函数先保存起来,当事件将来再次发生在运行。无论是数据库返回数据还是http请求返回数据,回调函数的执行被推迟到事件的发生之后。JavaScript的事件循环特性对于基于浏览器的交互是个良好选择,预测事件何时发生不太现实。Node.js将这一方法用到服务器端的网络和I/O操作中。




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值