async模块

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、总的事件执行时间和为几个事件执行时间之和

   3series串行方法=>第一个参数传入数组/对象,数组/对象内传入n个异步方法,第二个参数对一系列方法的结果处理

2)并行无关联    async. parallel ()

  个并行(两个同时执行)的操作,没关联--时间为某个事件执行的最长时间

3)串行有关联   async.waterfall()

  • series、parallel、waterfall都有两个参数,第一个参数是异步流程函数,可以写多个(用[]l来保存起来);第二个参数是回调函数,它的参数接收异步流程函数里面返回的值。

猜你喜欢

转载自blog.csdn.net/keep789/article/details/81540102