在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编程(二)--异步编程技术的更多相关文章

  1. Node.js之异步编程

    > 文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. ![file](https://img2018.cnblogs.com/blog/830272/20 ...

  2. C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)

    异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...

  3. C#并发编程之异步编程2

    C#并发编程之异步编程(二)   写在前面 前面一篇文章介绍了异步编程的基本内容,同时也简要说明了async和await的一些用法.本篇文章将对async和await这两个关键字进行深入探讨,研究其中 ...

  4. 【憩园】C#并发编程之异步编程(一)

    写在前面 C#5.0中,对异步编程进行了一次革命性的重构,引入了async和await这两个关键字,使得开发人员在不需要深刻了解异步编程的底层原理,就可以写出十分优美而又代码量极少的代码.如果使用得当 ...

  5. .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)

    本文内容 异步编程类型 异步编程模型(APM) 参考资料 首先澄清,异步编程模式(Asynchronous Programming Patterns)与异步编程模型(Asynchronous Prog ...

  6. Node单线程与异步编程的初步理解

    最近学习了一些关于node的单线程与异步的知识,想拿过来和大家分享下: var async = require('async') //并行无关联,等待事件为最长时间请求过程.如以下两个任务执行时间 c ...

  7. 深入浅出Node.js (4) - 异步编程

    4.1 函数式编程 4.1.1 高阶函数 4.1.2 偏函数用法 4.2 异步编程的优势与难点 4.2.1 优势 4.2.2 难点 4.3 异步编程解决方案 4.3.1 事件发布/订阅模式 4.3.2 ...

  8. 【憩园】C#并发编程之异步编程(二)

    写在前面 前面一篇文章介绍了异步编程的基本内容,同时也简要说明了async和await的一些用法.本篇文章将对async和await这两个关键字进行深入探讨,研究其中的运行机制,实现编码效率与运行效率 ...

  9. Java网络编程中异步编程的理解

    目录 前言 一.异步,同步,阻塞和非阻塞的理解 二.异步编程从用户层面和框架层面不同角度的理解 用户角度的理解 框架角度的理解 三.为什么使用异步 四.理解这些能在实际中的应用 六.困惑 参考文章 前 ...

  10. 【憩园】C#并发编程之异步编程(三)

      写在前面 本篇是异步编程系列的第三篇,本来计划第三篇的内容是介绍异步编程中常用的几个方法,但是前两篇写出来后,身边的朋友总是会有其他问题,所以决定再续写一篇,作为异步编程(一)和异步编程(二)的补 ...

随机推荐

  1. windows下编译支持https的libcurl

    本文参考http://blog.csdn.net/fragmentalice/article/details/39430293特此感谢.公司项目中用到几个http get请求,用的libcurl开源库 ...

  2. CodeForces 682A Alyona and Numbers (水题)

    Alyona and Numbers 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/A Description After fi ...

  3. 去掉 CONSOLE 窗口(转)

    建立一个win32 console application的话,linker的/subsystem选项应该为CONSOLE,可以在VC开发环境的project->setting->link ...

  4. OOP 6大基本原则

    1.开闭原则: 对扩展开发.对修改关闭. 2.里氏替换原则:子类替换父类(可以用父类对象的任何地方都可以用子类对象代替) 3.依赖倒置原则:程序要依赖于抽象接口,不要依赖于具体实现.简单的说就是要求对 ...

  5. C#学习笔记(十一):动态类型

    C#是一门静态类型的语言,但是在C#4.0时微软引入了动态类型的概念. dynamic 关键字dynamic用来定义动态对象,我们来看一下动态类型的一些特性. 调用不同类的相同方法 我们有两个或多个不 ...

  6. 【JDBC】事务的使用

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5868750.html 关于事务的理论知识.ACID特性等等,网上太多了,在此不一一重复.本文主要着重  事务 ...

  7. C# 解压zip压缩文件

    此方法需要在程序内引用ICSharpCode.SharpZipLib.dll 类库 /// <summary> /// 功能:解压zip格式的文件. /// </summary> ...

  8. C# - DynamicObject with Dynamic

    本文转载:http://joe-bq-wang.iteye.com/blog/1872756 里面有动态Linq to xml的写法. There is a expando object which ...

  9. PostgreSQL建表动作分析

    首先,建立表: pgsql=# create table tab10(id integer); CREATE TABLE pgsql::regclass; regclass ---------- ta ...

  10. Cocos2D Study - Preparation & Installation

    ---------------------------------------------------------------------------------------------------- ...