node.async.auto
资料
nodejs的高性能与灵活性让服务端开发变得有了些乐趣,最近在看nodejs在服务端的一些应用,觉得其npm下的众多开源包让其虽没有大型的框架 却能更自由的引用外部的模块编写属于自己风格的代码架构。
学习过程中,最让人觉得头痛的地方,个人觉得是异步执行,习惯了顺序执行代码的开发过程,开始的时候,因为面向对象的思想,封装继承多态的理论已经深入各编程语言,所以在进行设计的时候,好好的跌了一个跟头,发现原本清晰的业务逻辑,在执行后变得换乱不堪,其原因多在代码没有按照我的顺序或逻辑在执行。
后来才知道,原来上面遇到的问题是所有学习js的人都会经过的“名坑”,解决的方法也有很多。
其中最简单的一种就要属回调函数了,在js中,方法可以作为参数传递是其比较有趣的一个地方,而js中的异步执行造成 方法间的数据传递很不方便,需要借助回调函数的方式才能使用,但在回调函数以外,如果想用到这个数据,就要等这个方法执行完毕,而调用代码执行的时候,可能数据赋值的代码还未执行完,造成取不到值。
简单的回调函数 虽然解决了代码顺序执行的问题,但接下来,问题又来了,那就是回调函数之间,是嵌套的,深度的逻辑嵌套才能造成回调函数的正确执行逻辑和拿到我们想要拿到的数据,虽然在写回调函数加上注释的时候,个人觉得代码是更加流畅和可靠的,但在其可读性和代码量上 又是一个新的挑战。业务流程逐渐的加多,数据间的关系逐渐复杂时,业务之间的代码块变得越来越庞大和不易维护,相同作用的代码写了一遍又一遍,数据的传递也越发的困难和混乱。
试过了node中的很多种流程控制的方法,最舒服的就该属async了。
引用async模块,可以很好的实现代码的控制,保持代码的美观,其他的方法就不介绍了,在这里介绍一个auto方法,通过定义的function参数 、回调函数和数据结果集、方法间的相互依赖关系 可以很轻松的制定出代码规范的业务流程,使自己的业务逻辑既可以顺序执行,又对一些不必顺序执行的部分实施异步执行。
var async = require('async');
var funclist = {
    func1: function (callback, results) {
        console.log('func1执行,传入值{name:123}')
        callback(null, {name:'123'});
    },
    func2: function (callback, results) {
        console.log('func2执行,传入值 { "puncha": "during" }')
        //console.log(results);
        callback(null, { "puncha": "during" });
    },
    func3: ["func2", function (results, callback) {
        console.log('func3在func2执行后执行,传入值 3')
       // console.log(results);
        callback(null, 3);
    }],
    func4: ["func3", function (results,callback) {
        console.log('func4在func3执行后执行,总体执行结果为:')
        console.log(results);
        callback(null);
    }]
};
async.auto(funclist);
以上代码执行结果为:
func1执行,传入值{name:123}
func2执行,传入值 { "puncha": "during" }
func3在func2执行后执行,传入值 3
func4在func1执行后执行(根据以上逻辑,执行顺序为 func1先执行,func2,4并行,func3最后执行 ),总体执行结果为:
{ func1: { name: '123' }, func2: { puncha: 'during' }, func3: 3 }
node.async.auto的更多相关文章
- node async基础1
		async的基础使用 1 async each 语法格式each(collection, iteratee, [callback]) 用途:遍历集合中的元素,并行对每个元素执行一定的操作,但是 ... 
- Node async 控制代码执行顺序
		当你有一个集合,你想循环集合,然后对每个集合按照顺序执行相应的方法你可以使用forEachSeries 
- Node.js中Async详解:流程控制
		安装 npm install async --save 地址 https://github.com/caolan/async Async的内容主要分为三部分 流程控制: 简化九种常见的流程的处理 集合 ... 
- Node.js——Async
		一:流程控制 为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程 ... 
- node.js async 几个函数
		async.waterfallasync.seriesasync.parallelasync.auto http://my.oschina.net/huangsz/blog/176203http:// ... 
- async  珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制
		var async = require('async'); // series 串形任务 console.time('cost') async.series({ two:function(callba ... 
- node的async模块
		废话不多说,直接开始 这个模块有几种方法.分别用于的不通的情况自己喜欢怎么用就怎么用 第一个方法,series 这个方法用于串行切无关联.什么意思那就是,里面的方法是一个一个执行的,每一个方法相互不 ... 
- async源码学习 - 全部源码
		因为工作需要,可能我离前端走远了,偏node方向了.所以异步编程的需求很多,于是乎,不得不带着学习async了. 我有个习惯,用别人的东西之前,喜欢稍微搞明白点,so就带着看看其源码. github: ... 
- Async  异步转同步详细流程解释
		安装 npm install async --save 地址 https://github.com/caolan/async Async的内容主要分为三部分 流程控制: 简化九种常见的流程的处理 ... 
随机推荐
- Generate Parentheses 解答
			Question Given n pairs of parentheses, write a function to generate all combinations of well-formed ... 
- C++对象模型浅析
			本文仅代表博主自己对C++内存对象模型的一点理解,如果文中有 理解偏差和不准确的地方,希望各位大大提出,我好及时改正. 本博文只对博主自己负责,不对任何人负责. 就如<深度探索C++对象模型&g ... 
- java提高篇(二二)-----LinkedList
			摘自http://blog.csdn.net/chenssy/article/details/18099417 java提高篇(二二)-----LinkedList 一.概述 LinkedList与 ... 
- 安装vs2015的时候出现的各种 1402错误
			经搜索与尝试,确认为注册表权限问题,改过好几个子项,均提示不能修改设置子项的所有者什么的,后来一怒之下,直接把install节点下的compom项的权限的administratos权限删掉,删除的时候 ... 
- Oracle学习笔记(2)——过程和函数
			过程和函数统称为PL/SQL子程序,通过输入.输出参数或输入/输出参数与其调用者交换信息.他们是被命名的PL/SQL块,被编译后存储在数据库中,以备执行.因此,可以在数据库中直接按名称使用它们. 1. ... 
- ubuntu 文件readonly的问题: W10: Warning: Changing a readonly file 解决办法
			日前,笔者遇到一个奇怪且让人蛋疼的问题,借用别人的话"大家在linux上编辑文件的时候,明明是使用的root登录的,可是这种至高无上的权限在按下i的时候被那串红色错误亵渎了W10: Warn ... 
- 【Heritrix基础教程之3】Heritrix的基本架构
			Heritrix可分为四大模块: 1.控制器CrawlController 2.待处理的uri列表 Frontier 3.线程池 ToeThread 4.各个步骤的处理器 (1)Pre-fetch ... 
- Android 四大组件之 Activity
			1 简介 Activity (活动) 即应用程序 显示的 界面.可以通过两种方式 设置显示的内容 1:纯代码方式 2:xml 布局方式 无论哪一种方式,都是通过 setContentView 来设置显 ... 
- HTML之学习笔记(一)简介
			HTML(HyperText Markup Language超文本标记语言),'超文本'指的是页面不仅可以包含文本信息,还可以包含图片,链接等非文本元素.html与js,jq是共同用来进行网站前端开发 ... 
- 测试 windows live writer
			This is the first article written by the writer! wenzhaoshanda 
