Nodejs中Async模块的流程控制方法
首先,使用Asycn模块需要安装,它不是node自带的。其次,该模块有大约20多个流程控制方法,我们在这里仅分析常用的series, parallel, waterfall, auto这四种,并且尽量从原理上进行分析。
首先是series。顾名思义,它是控制异步函数按照串行顺序执行,只有前一个执行完毕,才能执行下一个异步调用。回调函数cb有两个参数:error和data,而它们可以为null。回调函数举个例子:
async.series([function(cb){
setTimeout(function(){
cb(null,1);
},1000)
},function(cb){
setTimeout(cb,1000,null,2);
}],function(err,result){ //result是每个回调函数传进来的data参数,result=[1,2]
if (err) console.error(err);
else console.log(result);
})
parallel的用法和series类似。只是数组中的函数是并行执行,parallel的总时间取决于运行时间最长的函数。而最终的回调函数里result的值是按照数组中函数的顺序排列的。
async.parallel([function(cb){
setTimeout(function(){
cb(null,1);
},1000)
},function(cb){
setTimeout(cb,1000,null,2);
}],function(err,result){ //result=[1,2]
if (err) console.error(err);
else console.log(result);
})
waterfall用法上有区别。waterfall中cb的参数data直接传给下一个函数,最后一个函数cb的data参数直接传给回调函数的result。
async.waterfall([function(cb){
setTimeout(function(){
cb(null,1);
},1000)
},function(data,cb){
setTimeout(cb,1000,null,data+"+"+"2");
}],function(err,result){ //result = "1+2"
if (err) console.error(err);
else console.log(result);
})
以上都是API用法,下面我们试着实现一下原理。
Nodejs中Async模块的流程控制方法的更多相关文章
- Nodejs中cluster模块的多进程共享数据问题
Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ...
- 在nodejs中引进模块要经历的步骤
在nodejs中引入模块需要经历如下3个步骤 1.路径分析 2.文件定位 3.编译执行 在nodejs中模块分为两类,一类是nodejs提供的模块,称为核心模块,另一类的用户编写的模块,称为文件模块. ...
- Nodejs中关于模块的总结
关于Nodejs中的模块 概念 Nodejs在ECMAScript的基础上扩展并封装了许多高级特性,如文件访问.网络访问等,使得Nodejs成为一个很好的Web开发平台.基于Nodejs这个平台将We ...
- Nodejs中的模块系统
一.模块化的定义 ①具有文件作用域 ②具有通信规则:加载和导出规则 二.CommonJS模块规范 1.nodejs中的模块系统,具有文件作用域,也具有通信规则,使用require方法加载模块,使用ex ...
- node (02 CommonJs 和 Nodejs 中自定义模块)顺便讲讲module.exports和exports的区别 dependencies 与 devDependencies 之间的区别
CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷.它的终极目标就是:提供一个类似 Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序的阶 ...
- Node.js学习笔记(二) --- CommonJs和Nodejs 中自定义模块
一. 什么是 CommonJs? JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器. 然而, JavaScript标准定义的 API 是为了构建基于浏览器的应用程序.并没有制定一 ...
- (四)、 nodejs中Async详解之一:流程控制
为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程控制:简化十种 ...
- nodejs中Async详解之一:流程控制
为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程控制:简化十种 ...
- Node.js中Async详解:流程控制
安装 npm install async --save 地址 https://github.com/caolan/async Async的内容主要分为三部分 流程控制: 简化九种常见的流程的处理 集合 ...
随机推荐
- JAVA编程规范(下)
JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1. 通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2. ...
- 在线编辑器的使用总结(kindeditor , )
1).kindedtor中让编辑框默认为“HTML代码/源代码”模式 [javascript] view plaincopyprint? <script> // 自定义插件 #1 Kind ...
- 通过Windows组策略限制证书组织流氓软件的安装运行
https://liwei2.com/2015/11/27/378.html关于如何提取证书,请参阅:https://www.zhihu.com/question/26917038http://www ...
- 如何将App程序发布到App Store?
见链接:http://my.oschina.net/u/1245365/blog/201920
- Linux学习笔记——重点推荐的Linux网络在线学习资源
首先非常感谢百度,感谢网络的搜索引擎技术,也非常感谢学习资源的贡献者和组织! 1:http://billie66.github.io/TLCL/book/zh/ 2:http://www.ha97. ...
- mysql连接查询,封装mysql函数
连接查询 交叉连接语法: select * | 字段列表 from 表1 cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...
- css3动画3
1.transition过渡动画 2.@keyframes关键帧动画,配合transform.animation使用
- leetcode-【中等题】3. Longest Substring Without Repeating Characters
题目: Given a string, find the length of the longest substring without repeating characters. Examples: ...
- JOST数据 日期转换
开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下所示: 复制代码代码如下: //设置服务 ...
- Nginx配置location总结及rewrite规则写法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #323333 } p. ...