node的async模块
2024-09-05 20:51:28
废话不多说,直接开始
这个模块有几种方法。分别用于的不通的情况自己喜欢怎么用就怎么用
第一个方法,series 这个方法用于串行切无关联。什么意思那就是,里面的方法是一个一个执行的,每一个方法相互不干扰。没有关系
使用起来也是很简单,我们看一下下面的内容
async.series({
fun1:(callback) =>{
console.log('one');
callback(null,{'name':'cyd'});
},
fun2:(callback) =>{
console.log('二');
callback(null,{'age':20});
},
fun3:(callback) =>{
console.log('三');
callback(null,{'phone':'15655243356'});
}
},function(err,res){
if(err){
console.log('err:'+err);
}else{
console.log(res);
// {
// fun1: { name: 'cyd' },
// fun2: { age: 20 },
// fun3: { phone: '15655243356' }
// }
var arr = [];
for(var item in res){
arr.push(res[item])
}
console.log('return:'+ JSON.stringify(arr));
// return:[{"name":"cyd"},{"age":20},{"phone":"15655243356"}]
}
})
在上面我们进行了他们一个一个执行相互不干扰,在执行完成以后,结果以对象的方式返回到回调中。
第二个是并行方法parallel
这个的意思就是,里面的方法是一是一起执行的。他们也是相互不干扰的,结果以对象的方式返回到回调中。
var async = require("async"); async.parallel({
fun1:(callback) =>{
console.log('one');
callback(null,{'name':'cyd'});
},
fun2:(callback) =>{
console.log('二');
callback(null,{'age':20});
},
fun3:(callback) =>{
console.log('三');
callback(null,{'phone':'15655243356'});
}
},function(err,res){
if(err){
console.log('err:'+err);
}else{
console.log(res); // { fun1: { name: 'cyd' },fun2: { age: 20 }, fun3: { phone: '15655243356' }}
var arr = [];
for(var item in res){
arr.push(res[item])
}
console.log('return:'+ JSON.stringify(arr)); //return:[{"name":"cyd"},{"age":20},{"phone":"15655243356"}]
console.timeEnd('parallel');
}
})
上面的方法都是同时执行的。这样会大大的减少运行时间。
下一个方法
waterfall 这个方法也是串行的但是这个下一个方法必须接受上一个方法的返回值。
async.waterfall([
(call) =>{
call(null,'one')
},
(one,call) =>{
call(null,one+'| two')
},
(two,call) =>{
call(null,two+'| three')
}
],function(err,res){
if(err){
console.log(err);
}else{
console.log(res); //one |two | three
} })
这个方法串行的写法必须以数组的方式去写。
下一个是auto的方法这个方法可以串行和并行放在一起里面可以有串行和并行
async.auto({
funa:function(callback){
console.log('我是第一个');
setTimeout(()=>{
callback(null,{'name':'玉帝'})
},2000)
},
funb:function(callback){
console.log('我也是第一个执行');
setTimeout(() =>{
callback(null,{'age':22});
},1000)
},
func:["funa", function(result,callback){
console.log('我是在第二个执行完执行');
setTimeout(() =>{
callback(null,{'phone':'15655321145'})
},2000)
}],
fund:['func',function(result,callback){
console.log('我是最后一个执行');
setTimeout(() =>{
callback(null,{'password':'yu1234560.'});
},3000)
}]
},
function(err,res){
if(err){
console.log('错误:'+err);
}else{
console.log('返回值:'+ JSON.stringify(res));
} }
)
在上面的代码中,funa和funb是一起执行,func的写法是说,当funb执行完成开始执行func,func执行完成,执行fund。
这样让我们在开发中更好的控制异步操作。
最新文章
- Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM
- Unity3D热更新全书FAQ
- Websense更名换帅
- lambda表达式和闭包
- Notepad++ 使用探索
- FCC学习笔记(一)
- iview inoput type=textarea 禁止拉伸
- shell脚本的小记
- sqlserver 并行度
- AVPass技术分析:银行劫持类病毒鼻祖BankBot再度来袭,如何绕过谷歌play的杀毒引擎?
- 兼容性问题:backgroud-size支持IE8浏览器的方法
- 如何使用Action.Invoke()触发一个Storyboard
- BeautifulSoup的基本用法
- ios Block详解
- R绘图 第七篇:绘制条形图(ggplot2)
- 【Java】数组不能通过toString方法转为字符串
- Mysql的唯一性索引unique
- Gridview、DataList、Repeater获取行索引号
- mvc 提交Html内容的处理
- 有关String的转换的一篇好文章