浅析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 相关文章推荐
不错的一个日期输入 动态
Nov 06 Javascript
JS宝典学习笔记(下)
Jan 10 Javascript
JavaScript中的null和undefined解析
Apr 14 Javascript
深入理解javaScript中的事件驱动
May 21 Javascript
关于jquery的多个选择器的使用示例
Oct 18 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
Jquery遍历Json数据的方法
Apr 20 Javascript
Node.js中process模块常用的属性和方法
Dec 13 Javascript
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
微信小程序实现日期格式化和倒计时
Nov 01 Javascript
Vue实现商品详情页的评价列表功能
Sep 04 Javascript
插件导致ECharts被全量引入的坑示例解析
Sep 23 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构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
python将字符串转换成数组的方法
2015/04/29 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
获取Django项目的全部url方法详解
2017/10/26 Python
python如何求解两数的最大公约数
2018/09/27 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
《花的勇气》教后反思
2014/02/12 职场文书
2015入党自传书范文
2015/06/26 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书