浅析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 设计模式学习 Factory
Jul 29 Javascript
JS实现随机数生成算法示例代码
Aug 08 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
jQuery EasyUI Panel面板组件使用详解
Feb 28 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
Vue项目使用CDN优化首屏加载问题
Apr 01 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
vue项目出现页面空白的解决方案
Oct 31 Javascript
详解React 条件渲染
Jul 08 Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 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
一个简单计数器的源代码
2006/10/09 PHP
也谈php网站在线人数统计
2008/04/09 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
浅谈PHP中的
2016/04/23 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
Python爬取读者并制作成PDF
2015/03/10 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
python 内置函数filter
2017/06/01 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
pandas中的series数据类型详解
2019/07/06 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python conda操作方法
2019/09/11 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
聊城大学毕业生自荐书
2014/02/01 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
百家讲坛观后感
2015/06/12 职场文书
教师节班会主持词
2015/07/06 职场文书
MySQL约束超详解
2021/09/04 MySQL
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python