码迷,mamicode.com
首页 > 其他好文 > 详细

NODE编程(二)--异步编程技术

时间:2016-08-21 00:34:40      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

  在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社区被称之为流程控制,分为:串行和并行。

  需要一个接着一个做的任务叫做串行任务。不需要一个接一个做,两个或多个人物同步进行叫做并行任务。这些任务彼此之间开始和结束的时间并不重要,但在后续逻辑执行之前他们应该全部做完。

NODE编程(二)--异步编程技术

标签:

原文地址:http://www.cnblogs.com/xz1024/p/5789419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!