zoukankan      html  css  js  c++  java
  • NODE编程(二)--异步编程技术

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

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

  • 相关阅读:
    SQL Server 连接字符串和身份验证
    常用jQuery选择器总结【转】
    javascript深入理解js闭包[转]
    JS鼠标事件大全
    JS 获取各个宽度和高度
    移动设备屏幕缩放
    面向对象学习【类-匿名类】
    Java学习笔记之log4j与commons-logging<转>
    Java数据库连接——JDBC基础知识(操作数据库:增删改查)【转】
    静态方法和非静态方法的区别
  • 原文地址:https://www.cnblogs.com/xz1024/p/5789419.html
Copyright © 2011-2022 走看看