浅析node Async异步处理模块用例分析及常用方法介绍


Posted in Javascript onNovember 17, 2017

最近在研究nodejs,令我感受比较深的是……熟悉js代码的地球人都知道,js的加载顺序很重要!很重要!!那么问题来了,在编写node的时候,会在后台去请求很多接口(我们公司是与java后台交接数据的),接口就会有个回调,这么多回调怎么办呢……每个回调回来的加载顺序怎么去处理是个问题……总不可能去嵌套……嵌套……这样吧,那会显的多麻烦!!这么大的一个问题怎么没有处理方法呢,那是不可能的……对吧!

Async异步处理模块!

以下是小sam的理解:

安装很简单,就跟普通的安装模块一样就行了

这样就安装成功了! 接下来就是引用了,在代码里引用模块:

var async = require('async');

这样引用也就ok了!在代码后面就可以轻松的用async这个对像模块了!

查了下官方文档,这个模块的方法实在是太多了!看的眼花……

下面我们来谈谈小编觉得比较常用到的几个方法就好了

series

1.series(tasks, [callback]) 顺序执行数组、集合内的函数,当前面一个函数执行完成就会立即执行下一个函数,如果函数触发了错误,可以在callback函数中验证,否则会一直执行完成tasks

话多没用,代码才是亲爹

用例:

//tasks传的是一个数组函数
async.series([
  function(callback) {
  // do some stuff ...
  callback(null, 'one');
},
 function(callback) {
 // do some more stuff ...
 callback(null, 'two');
}],
// optional callback
//我觉得这里很重要err是上面两个函数的错误信息,而results这个参数是一个数组对象,它们的值是上面数组函数每个callback里面的参数。
function(err, results) {
// results is now equal to ['one', 'two']
});
// an example using an object instead of an          
//下面的代码其实跟上面的差不多,只是stasks传的是对象而不是数组
async.series({
one: function(callback) {
  setTimeout(function() {
    callback(null, 1);
  },
  200);
},
two: function(callback) {
  setTimeout(function() {
    callback(null, 2);
  },
  100);
 }
},
function(err, results) {
// results is now equal to: {one: 1, two: 2}
});

parallel

2.parallel(tasks, [callback])

并行执行数组、集合内的方法,不用等到前一个函数执行完再执行下一个函数,如果函数触发了错误,可以在callback函数中验证

async.parallel(
[
 function(callback) {
  setTimeout(function() {
     callback(null, 'one');
    },
  200);
 },
 function(callback) {
  setTimeout(function() {
    callback(null, 'two');
  },
  100);
 }
],
 // optional callback
 function(err, results) {
  // the results array will equal ['one','two'] even thoug
  // the second function had a shorter       
  timeout
 }
);

parallelLimit

3.parallelLimit(tasks, limit, [callback])

和2用法一样,只是多了一个任务数量限制,最多允许多少个任务在并行执行

whilst

4.whilst(test, fn, callback)

等同于while的用法,第一个参数为验证条件,第二个参数为执行函数,第三个参数为验证失败后回调函数,一般在做延迟动画用的比较多

var count = 0;
 async.whilst(
 function () { return count < 5; },
 //验证成  功继续,失败进回调
 function (callback) {
   count++;
   setTimeout(callback, 1000);
 },
 function (err) {
   // 5 seconds have passed
 }
);

waterfall

5.waterfall(tasks, [callback])

tasks依次运行,前一个函数的回调会作为后一个函数的参数,如果有任何任务通过一个错误的回调,下一个函数不执行

async.waterfall([
 function(callback){
   callback(null, 'one', 'two');
 },
 function(arg1, arg2, callback){
  // arg1 now equals 'one' and arg2 nowequals 'two'
   callback(null, 'three');
 },
 function(arg1, callback){
   // arg1 now equals 'three'
   callback(null, 'done');
 }
 ], function (err, result) {
  // result now equals 'done'  
});

compose

6.compose(fn1, fn2...)

按顺序加入到队列中,按顺序执行,将上一个函数的结果作为下一个函数的值

function add1(n, callback) {
 setTimeout(function () {
   callback(null, n + 1);
 }, 10);
 }
 function mul3(n, callback) {
 setTimeout(function () {
   callback(null, n * 3);
 }, 10);
}
var add1mul3 = async.compose(mul3, add1);
 add1mul3(4, function (err, result) {
// result now equals 15
});

总结

以上所述是小编给大家介绍的浅析node Async异步处理模块用例分析及常用方法介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
javascript实现日期按月份加减
May 15 Javascript
js使用cookie记录用户名的方法
Nov 26 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 Javascript
js实现的简练高效拖拽功能示例
Dec 21 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
JavaScript实现随机五位数验证码
Sep 27 Javascript
JavaScript ES6的函数拓展
Jan 18 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 #Javascript
在 Node.js 中使用 async 函数的方法
Nov 17 #Javascript
JS实现的数组去除重复数据算法小结
Nov 17 #Javascript
bootstrap轮播模板使用方法详解
Nov 17 #Javascript
浅谈Node模块系统及其模式
Nov 17 #Javascript
基于Bootstrap表单验证功能
Nov 17 #Javascript
js 毫秒转天时分秒的实例
Nov 17 #Javascript
You might like
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
Python抓取京东图书评论数据
2014/08/31 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
python实现udp传输图片功能
2020/03/20 Python
Python的历史与优缺点整理
2020/05/26 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
外企测试工程师面试题
2015/02/01 面试题
社区党员先进事迹
2014/01/22 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
实习指导老师意见
2015/06/04 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
MySQL 逻辑备份 into outfile
2022/05/15 MySQL