标签:
在Node世界里流行两种响应逻辑管理方式,回调和事件监听。
回调通常用来定义一次性响应的逻辑。比如对于数据的查询,可以指定一个回调函数来确定如何处理查询结果。
事件监听器,本质上也是一个回调,不同的是,它跟一个概念实体(事件)相关联。在Node中,当有HTTP请求过来是,HTTP服务器会发出一个请求事件。你可以监听这个请求事件,并添加一些响应逻辑。
一、用回调处理一次性事件
回调是一个函数,它被当做参数传给异步函数,它描述了异步操作完成之后要做什么。
/*在简单的程序重使用回调*/ var http = require(‘http‘); var fs = require(‘fs‘); http.createServer(function(req,res){ //创建HTTP服务器并用回调定义响应逻辑 if(req.url == ‘/‘){ fs.readFile(‘./title.json‘,function(err,data){ //读取JSON文件并用回调定义如何处理其中的内容 if(err){ //如果出错,输出错误日志,并给客户端返回‘server ERROR’ console.error(err); res.end(‘Sever ERROR‘); }else{ var titles = JSON.parse(data.toString()); fs.readFile(‘./template.html‘,function(err,data){ //读取HTML模板,并加载完成后使用回调 if(err){ console.error(err); res.end(‘SERVER ERROR‘); }else{ var tmpl = data.toString(); var html = tmpl.replace(‘%‘,titles.join(‘</li><li>‘)); //组装HTML页面以显示博客标题 res.writeHead(200,{‘Content-Type‘:‘text/html‘}); res.end(html); //将HTML页面发送给用户 } }) } }) } }).listen(8000,"127.0.0.1");
上面这个例子嵌入了三个回调.
Node的异步回调惯例:
Node中的大多数内置模块在使用回调的时候后都会带两个参数:第一个是用来放可能会发生的错误,第二个放结果。错误参数经常被缩写成er或err。
二、用事件发射器处理重复性事件。
事件发射器会触发事件,并且在那些事件被触发时能处理它们。一些重要的Node API组件,比如HTTP服务器,TCP服务器、流都被做成了事件发射器。
事件是通过监听器进行处理的。监听器是跟事件相关联的,带有一个事件出现时就会被触发的回调函数。
比如,Node中的TCP sockt,它有一个data时间,每当socket中有新数据时就会触发:
socket.on(‘data‘,handleData);
三、异步逻辑的顺序化
让一组异步任务顺序执行的概念在node社区被称之为流程控制,分为:串行和并行。
需要一个接着一个做的任务叫做串行任务。不需要一个接一个做,两个或多个人物同步进行叫做并行任务。这些任务彼此之间开始和结束的时间并不重要,但在后续逻辑执行之前他们应该全部做完。
标签:
原文地址:http://www.cnblogs.com/xz1024/p/5789419.html