async是一个异步处理模块,主要有三个方式:
- 串行无关联 async.series()
- 并行无关联 async.parallel()
- 串行有关联 async.waterfall()
他们的基本用法,建一个a的文件夹,在它下面打开命令窗口,npm init 创建package.json文件,之后安装依赖,npm i async -D
写一个异步流程的js文件如下
//yb.js
var async = require("async");
console.time("times");
//串行无关联
async.series([
function(callback){
setTimeout(function(){
callback(null,"1")//第一个参数为null代表没有错误
},1000)
},
function(callback){
setTimeout(function(){
callback(null,"2")
},2000)
},
function(callback){
setTimeout(function(){
callback(null,"3")
},3000)
}
],function(err,data){
console.timeEnd("times")
console.log(data)
})
//并行无关联
async.parallel([
function(callback){
setTimeout(function(){
callback(null,"1")//第一个参数为null代表没有错误
},1000)
},
function(callback){
setTimeout(function(){
callback(null,"2")
},2000)
},
function(callback){
setTimeout(function(){
callback(null,"3")
},3000)
}
],function(err,data){
console.timeEnd("times")
console.log(data)
})
//串行有关联
async.waterfall([
function(callback){
callback(null,"1")
},
function(a,callback){
callback(null,a,"2")
},
function(a,b,callback){
callback(null,[a,b,"3"])
}
],function(err,data){
console.log(data)
})
通过node yb 打印的结果会发现,串行无关联所用时间是所有相关函数执行时间的总和,并行有关联最终时间是用时最长的那个函数的时长。串行有关联的函数之间有关联,前面的函数可以给后面的传参。
总结:
1)串行无关联 async. series()
1、做两个串行的异步请求,无关联,无论什么时候返回,都能拿到结果
2、总的事件执行时间和为几个事件执行时间之和
3、series串行方法=>第一个参数传入数组/对象,数组/对象内传入n个异步方法,第二个参数对一系列方法的结果处理
2)并行无关联 async. parallel ()
两个并行(两个同时执行)的操作,没关联--时间为某个事件执行的最长时间
3)串行有关联 async.waterfall()
- series、parallel、waterfall都有两个参数,第一个参数是异步流程函数,可以写多个(用[]l来保存起来);第二个参数是回调函数,它的参数接收异步流程函数里面返回的值。