博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js中流程控制
阅读量:5025 次
发布时间:2019-06-12

本文共 2528 字,大约阅读时间需要 8 分钟。

Node.js中的流程控制可以使用async,在使用之前需要先安装,使用npm安装

npm install async --g

下面主要介绍4种流程控制的方式:

1、串行无关联:async.series(tasks,callback)

多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行;

以下是标准写法:

async.series({         one: function(callback){             callback(null, 1);         },         two: function(callback){             callback(null, 2);         }     },function(err, results) {         console.log(results);     });

为了测试,我们使用交叉执行的方式:

var async = require('async');   function exec(){      async.series({           one: function(done){              ii=0;              setInterval(function(){                  console.log('aaa='+new Date());                  ii++;                  if(ii==3){                      clearInterval(this);                      done(null,{one:"one"});                  }              },1000);          },          two: function(done){              jj=0;              setInterval(function(){                  console.log('bbb='+new Date());                  jj++;                  if(jj>3){                      clearInterval(this);                      done(null,{two:"two"});                  }              },1000);          }      },          function(err,rs) {               console.log(err);              console.log(rs);          });  }  exec();

2、并行无关联:async.parallel(tasks,callback);     

多个函数并行执行,最后汇总结果,如果某一个流程出错就退出   

async.parallel({         one: function(callback){             callback(null, 1);         },         two: function(callback){             callback(null, 2);         }     },function(err, results) {         console.log(results);     });

3、串行有关联:waterfall      

每一步执行时需要由上一步执行的结果当做参数.所以每一步必须串行等待

async.waterfall([         function (done) {                  done(null, 'one');         },         function (onearg, done) {                  done(null, onearg + '| two');         },         function (twoarg, done) {                  done(null, twoarg + '| three');         },         function (threearg, done) {                  done(null, threearg + '| four');         }     ], function (error, result) {         console.log(result);         console.timeEnd('waterfall');     })

4、parallelLimit(tasks, limit, [callback])

 parallelLimit函数和parallel类似,但是它多了一个参数limit。     
 limit参数限制任务只能同时并发一定数量,而不是无限制并发;

async.parallelLimit([         function(callback){             callback(null, 'one');         },         function(callback){             callback(null, 'two');         }     ],     2, //只允许同时有两个函数并行     function(err, results){         console.log(results);     });

 

转载于:https://www.cnblogs.com/kefeiGame/p/9167584.html

你可能感兴趣的文章
图像切割之(一)概述
查看>>
JAVA修饰符类型(public,protected,private,friendly)
查看>>
flex利用webservice上传照片
查看>>
IOS开发之Bug--使用KVC的易错情况
查看>>
python list和tuple
查看>>
基础薄弱的反思
查看>>
代码说明call和apply方法的区别 (咱们这方面讲解的少,这样的题有变式,需要举例讲解一下)...
查看>>
T-SQL 类型转换
查看>>
在eclipse中设计BPMN 2.0工作流定义的根本步骤
查看>>
Json对象与Json字符串互转(4种转换方式)
查看>>
PAT甲级1002 链表实现方法
查看>>
查看Linux信息
查看>>
Python中sys模块sys.argv取值并判断
查看>>
【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
查看>>
并查集
查看>>
ubuntu 11.04下android开发环境的搭建!
查看>>
Bzoj 3343: 教主的魔法
查看>>
括号序列(栈)
查看>>
一件趣事
查看>>
DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
查看>>