时间:2021-05-26
async官方DOC
介绍
node安装
npm install async --save
使用
var async = require('async')
js文件
https://github.com/caolan/async/tree/master/dist
async提供了很多函数用于异步流程控制,下面是async核心的几个函数,完整的函数请看async官方DOC
async.map(['file1','file2','file3'], fs.stat, function(err, results) { // results is now an array of stats for each file});async.filter(['file1','file2','file3'], function(filePath, callback) { fs.access(filePath, function(err) { callback(null, !err) });}, function(err, results) { // results now equals an array of the existing files});async.parallel([ function(callback) { ... }, function(callback) { ... }], function(err, results) { // optional callback});async.series([ function(callback) { ... }, function(callback) { ... }]);series串行
series的作用就是按照顺序一次执行。
async.series([ function(callback) { setTimeout(function() { callback(null, 1) }, 2000); }, function(callback) { callback(null, 2); }], function(err, results) { console.log(results); });输出结果为
[ 1, 2 ]
series函数的第一个参数可以是一个数组也可以是一个JSON对象,参数类型不同,影响的是返回数据的格式。
async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); }},function(err, results) { console.log(results);});输出为
{one: 1, two: 2}
waterfall瀑布流
waterfall和series函数都是按照顺序执行,不同之处是waterfall每个函数产生的值都可以传递给下一个函数,series不可以。
async.waterfall([ function(callback) { callback(null, 'one', 'two'); }, function(arg1, arg2, callback) { // arg1 now equals 'one' and arg2 now equals 'two' console.log('function 2') console.log('arg1: ' + arg1) console.log('arg2: ' + arg2) callback(null, 'three'); }, function(arg1, callback) { console.log('function 3') console.log('arg1: ' + arg1) // arg1 now equals 'three' callback(null, 'done'); }], function(err, result) { // result now equals 'done' console.log(result);});输出
function 2
arg1: one
arg2: two
function 3
arg1: three
done
waterfall第一个参数只能为数组。当中途有函数出错,其err直接传给最终callback,结果被丢弃,后面的函数不再执行。
parallel(tasks, [callback])
paraller函数是并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。
传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序。
tasks参数可以是一个数组或是json对象,和series函数一样,tasks参数类型不同,返回的results格式会不一样。
将示例中tasks的回调函数用setTimeout在1000毫秒后调用,然后在parallel的回调函数中输出results,看一看整个过程花费了1s还是2s。
var async=require("async");async.parallel([ function(callback){ setTimeout(function(){ callback(null, 'one') },1000); }, function(callback){ setTimeout(function(){ callback(null, 'two') },1000); }],function(err, results){ console.log(results);});parallelLimit(tasks, limit, [callback])
parallelLimit函数和parallel类似,但是它多了一个参数limit。 limit参数限制任务只能同时并发一定数量,而不是无限制并发,示例如下:
async.parallelLimit([ function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); }],2,function(err, results){});将示例中tasks的回调函数用setTimeout在1000毫秒后调用,limit参数设置为1,然后在parallelLimit的回调函数中输出results,看一看整个过程花费了1s还是2s。
var async=require("async");async.parallelLimit([ function(callback){ setTimeout(function(){ callback(null, 'one'); }, 1000); }, function(callback){ setTimeout(function(){ callback(null, 'two'); }, 1000); }],1,function(err, results){ console.log(results);});map(coll, iteratee, callbackopt)
map函数遍历传入的数组,并执行同样的操作,最终返回结果
cool:数组
iteratee:对数组每一项要执行的函数
callbackopt:回调函数
[ 6, 7, 8, 9, 10 ]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
随着Node7的发布,越来越多的人开始研究据说是异步编程终级解决方案的async/await。异步编程的最高境界,就是根本不用关心它是不是异步。async函数就
前言C++11中提供了异步线程接口std::async,std::async是异步编程的高级封装,相对于直接使用std::thread,std::async的优
众所周知C#提供Async和Await关键字来实现异步编程。在本文中,我们将共同探讨并介绍什么是Async和Await,以及如何在C#中使用Async和Awai
本文介绍了三分钟学会用ES7中的Async/Await进行异步编程,分享给大家,具体如下:Async/Await基本规则async表示这是一个async函数,a
前言在之前的SpringBoot基础教程系列中,已经通过《SpringBoot中使用@Async实现异步调用》一文介绍过如何使用@Async注解来实现异步调用了