浅析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实现每日签到功能
Apr 03 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
Jul 21 Javascript
JavaScript里 ==与===区别详解
Aug 16 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
Sep 19 Javascript
折叠菜单及选择器的运用
Feb 03 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
Vue 中对图片地址进行拼接的方法
Sep 03 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 Javascript
微信小程序实现购物车小功能
Dec 30 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
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
Python timeit模块的使用实践
2020/01/13 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
简历自我评价怎么写呢?
2014/01/06 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
学前班学生评语
2014/12/29 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫
python使用BeautifulSoup 解析HTML
2022/04/24 Python
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers