async.js入门

Async 是一个实用模块,它为使用异步 JavaScript 提供了直接、强大的功能。虽然最初设计用于Node.js,但它也可以直接在浏览器中使用。

安装

npm install --save async

使用

async的常用方法有series、parallel、waterfall、auto

1. series

依次运行tasks集合中的函数,每个函数在前一个函数完成后运行。如果系列中的任何函数将错误传递给其回调,则不再运行任何函数,并callback立即使用错误的值调用。否则,在完成后callback 接收结果数组。

const async =require("async");
async.series([
   function(callback){
   	callback(null,'1')
   },
   function(callback){
   	callback(null,'2');
   }
   ],function(err,result){
   	console.log(err);
   	console.log(result);

   });

运行结果:
在这里插入图片描述
注意当Task的err参数不为空时,执行完当前,后边不再执行

const async =require("async");
async.series([
	function(callback){
		callback("err",'1')
	},
	function(callback){
		callback(null,'2');
	}
	],function(err,result){
		console.log(err);
		console.log(result);

	});

结果如下:
在这里插入图片描述

2.parallel

并行运行tasks函数集合,无需等到前一个函数完成。如果任何函数将错误传递给其回调,callback则会立即使用错误值调用 main。一旦tasks完成,结果将 callback作为数组传递给最终结果。

注意: parallel是关于并行启动 I/O 任务,而不是关于代码的并行执行。如果您的任务不使用任何计时器或执行任何 I/O,它们实际上将被串行执行。每个任务的任何同步设置部分都将一个接一个地发生。JavaScript 仍然是单线程的。

提示:用于reflect在任务失败时继续执行其他任务。
例如:

const async=require('async');
async.parallel([
	function(callback){
		setTimeout(()=>{
			console.log("first Task");
			callback(null,"1");
		},1000)
	},
	function(callback){
		setTimeout(()=>{
			console.log("second Task");
			callback(null,"2");
		},100)
	}
	],function(err,result){
		
		console.log(err);
		console.log(result);
	});

结果如下
在这里插入图片描述
分析
结果保持task添加顺序,而执行是异步的。
当发生错误时,立即调用完成函数,仍会把所有task执行完毕。

const async=require('async');
async.parallel([
	function(callback){
		setTimeout(()=>{
			console.log("first Task");
			callback(null,"1");
		},1000)
	},
	function(callback){
		setTimeout(()=>{
			console.log("second Task");
			callback("err","2");
		},100)
	}
	],function(err,result){
		
		console.log(err);
		console.log(result);
	});

结果
在这里插入图片描述

3.waterfall

依次运行tasks函数数组,每个函数将其结果传递给数组中的下一个。但是,如果任何tasks一个将错误传递给他们自己的回调,则不会执行下一个函数,并且callback会立即调用 main 并返回错误

const async=require('async');
async.waterfall([
		function(callback){
			setTimeout(()=>{
				callback(null,1,2)
			},3000)
		},
		function(param1,param2,callback){
			setTimeout(()=>{
				//console.log(param1,param2);
				callback(null,3)
			},100)
		}
	],
	function(err,result){
		console.log(err);
		console.log(result);

	})

结果如下
在这里插入图片描述
分析
result返回的是最后Task的结果

4.auto

根据要求确定运行AsyncFunction的最佳顺序tasks。每个功能可以选择依赖于其他功能先完成,并且每个功能在满足其要求后立即运行。

如果任何AsyncFunction将错误传递给它们的回调,则auto序列将停止。进一步的任务将不会执行(因此任何其他依赖于它的函数都不会运行),并且callback会立即调用 main 并显示错误。
例如:

const async=require('async');
async.auto(
{
	func1:function(callback){
		setTimeout(()=>{
			callback(null,'func1');
		},3000)
			
	},
	func2:function(callback){
		callback(null,'func2');
	},
	func3:["func1",function(param1,callback){
		callback(null,'func3')

	}]

},
function(err,result){
	console.log(err,result);
}

);

结果如下
在这里插入图片描述
中间能获取当前运行结果参数

const async=require('async');
async.auto(
{
	func1:function(callback){
		setTimeout(()=>{
			console.log('func1');
			callback(null,'func1');
		},3000)
			
	},
	func2:function(callback){
		console.log('func2')
		callback(null,'func2');
	},
	func3:["func1",function(param1,callback){
		console.log("param1:"+JSON.stringify(param1))
		console.log('func3')
		callback(null,'func3')

	}]

},
function(err,result){
	console.log(err,result);
}

);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值