练习四十九:再次搞懂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())
});

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1