浅析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 相关文章推荐
如何简单地用YUI做JavaScript动画
Mar 10 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
Jquery读取URL参数小例子
Aug 30 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
JS实现队列的先进先出功能示例
May 10 Javascript
hammer.js实现图片手势放大效果
Aug 29 Javascript
Electron-vue脚手架改造vue项目的方法
Oct 22 Javascript
React自定义hook的方法
Jun 25 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中OR与|| AND与&amp;&amp;的区别总结
2013/10/26 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
php 常用的系统函数
2017/02/07 PHP
Javascript alert消息换行的方法
2013/08/07 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
python读取oracle函数返回值
2016/07/18 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
实例详解Python装饰器与闭包
2019/07/29 Python
python flask搭建web应用教程
2019/11/19 Python
Python自带的IDE在哪里
2020/07/01 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
金宝贝童装官网:Gymboree
2016/08/31 全球购物
尼克松手表官网:Nixon手表
2019/03/17 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
精彩广告词大全
2014/03/19 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
《日月潭》教学反思
2016/02/20 职场文书
导游词之天津盘山
2019/11/01 职场文书
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers