浅析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 相关文章推荐
Javascript的一种模块模式
Sep 08 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 Javascript
Jquery对数组的操作技巧整理
Mar 25 Javascript
禁用Tab键JS代码兼容Firefox和IE
Apr 18 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
JS简单判断函数是否存在的方法
Feb 13 Javascript
Node.js 使用流实现读写同步边读边写功能
Sep 11 Javascript
React如何解决fetch跨域请求时session失效问题
Nov 02 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 Javascript
three.js 制作动态二维码的示例代码
Jul 31 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
php变量作用域的深入解析
2013/06/03 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
Python内置函数delattr的具体用法
2017/11/23 Python
Python列表切片操作实例总结
2019/02/19 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
翻译专业应届生求职信
2013/11/23 职场文书
物流专员岗位职责
2014/02/17 职场文书
开学典礼策划方案
2014/05/28 职场文书
无房证明范本
2014/09/17 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
升职感谢信
2015/01/22 职场文书
总经理年会致辞
2015/07/29 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
python Polars库的使用简介
2021/04/21 Python
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫