练习四十九:再次搞懂async包
练习四十九:再次搞懂async包
var async=require('async');
1.async.series:串行无关联(格式async.series( [ 函数 ] ,回调结果 ))
多个函数或方法要依次执行,但是他们之间并没有什么联系,只有先后的顺序,比如我要写一个文件,写完之后像用户发送邮件,这两者之间没有必然的联系,但是发邮件必须在写文件完成之后。
async里有一个方法series可以实现这一流程,代码实现如下:
var async=require("async")
function func1(callback){
console.log("func1")
callback(null,"1")
}
function func2(callback){
console.log("func2..")
callback(null,"2")
}
function func3(callback){
console.log("func3")
callback(null,"3")
}
async.series([func1,func2,func3],function(err,data){
console.log(data)
})
2.async.parallel:并行无关联(格式async.parallel( [ 函数 ] ,回调结果 ))
async.parallel:并行无关联
task并行运行函数集合,而不必等到上一个函数完成。如果任何函数发生错误,会立刻执行回调函数,并返回错误信息;若没有发生错误,则会再所有tasks函数执行完毕之后用回掉函数将结果返回。
var async=require("async")
function func1(callback){
console.log("func1")
callback(null,"A")
}
function func2(callback){
console.log("func2..")
callback(null,"B")
}
function func3(callback){
console.log("func3")
callback(null,"C")
}
async.parallel([func1,func2,func3],function(err,data){
console.log(data)
})
// func1
// func2..
// func3
// [ 'A', 'B', 'C' ]
3.async.waterfall:串行有关联
瀑布流函数,串行执行数组中的每一个函数最后执行回调。 语法:async.waterfall(tasks,callback) 第一个参数tasks是一个数组,数组包含的是需要依次执行的函数。第二个参数为回调函数,当瀑布流函数(即tasks数组中的函数)执行出现错误时会执行这个回调函数并将错误信息返回,当瀑布流函数无错误时,会在执行完tasks数组中包含的函数后执行这个回调函数。
var async=require("async")
function func1(callback){
console.log("func1")
callback(null,"1")
}
function func2(data,callback){
console.log("func2..")
callback(null,data+"2")
}
function func3(data,callback){
console.log("func3")
callback(null,data+"3")
}
async.waterfall([func1,func2,func3],function(err,data){
console.log(data)
})
// func1
// func2..
// func3
// 123
4.async.auto:智能控制
以上都是纯串行传并行,但是当一个场景里,需要使用串行也需要使用并行的时候,虽然分别写能解决,但是效率不是很高,维护性也不是很好,auto可以解决这一问题。
var async=require("async")
function func1(callback){
console.log("func1")
callback(null,"A")
}
function func2(callback){
console.log("func2..")
callback(null,"B")
}
function func3(callback){
console.log("func3")
callback(null,"C")
}
async.auto([func1,func2,func3],function(err,data){
console.log(data)
})
// func1
// func2..
// func3
// { '0': 'A', '1': 'B', '2': 'C' }
5.async.map
格式,async.map( 参数,异步函数,回调 )
var async=require("async")
var fs = require("fs");
var canshu=['1.txt','2.txt']
async.map(canshu,fs.readFile,function(err,data){
console.log(data.toString())
});
近期评论