异步官方医生
介绍
节点安装
npm安装异步——保存
使用
var异步=要求(异步)
github.com/caolan/asyn…
异步提供了很多函数用于异步流程控制,下面是异步核心的几个函数,完整的函数请看异步官方医生
异步。地图([file1、file2, ' file3 '], fs。统计函数(呃,结果){//结果现在每个文件数据的数组 }); 异步。过滤器([file1、file2, ' file3 '],函数(回调filePath) { fs。访问(filePath、功能(err) { 回调(null, !呃) }); (呃,结果){},函数//结果现在等于数组现有的文件 }); async.parallel ([ 函数(回调){…}, 函数(回调){…} )、功能(呃,结果){//可选的回调 }); async.series ([ 函数(回调){…}, 函数(回调){…}]);
系列的作用就是按照顺序一次执行。
async.series ([ 函数(回调){ setTimeout(函数(){ 回调(null, 1) },2000); }, 函数(回调){ 回调(null, 2); }), 函数(呃,结果){ console.log(结果); });
输出结果为
(1、2)
系列函数的第一个参数可以是一个数组也可以是一个JSON对象,参数类型不同,影响的是返回数据的格式。
async.series ({> async.waterfall ([ 函数(回调){ 回调(null,“一个”,“两个”); }, 回调函数(__arg1、最长){//现在__arg1=?”和最长=?” 控制台。日志(功能2) 控制台。日志(“__arg1:”+ __arg1) 控制台。日志('最长:' +最长) 回调(null,“三”); }, 回调函数(__arg1) { 控制台。日志(' 3 ')函数 控制台。日志(“__arg1:”+ __arg1)//__arg1现在等于‘三’ 回调(null,“完成”); } )、功能(呃,结果){//结果现在等于“完成” console.log(结果); });
输出
函数2
__arg1:>
平行(任务,(回调))
paraller函数是并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。
传给最终回调的数组中的数据按照任务中声明的顺序,而不是执行完成的顺序。
async.parallel ([ 函数(回调){ 回调(null,“一个”); }, 函数(回调){ 回调(null,“两”); } ), 函数(呃,结果){ });
任务参数可以是一个数组或是json对象,和系列函数一样,任务参数类型不同,返回的结果格式会不一样。
将示例中任务的回调函数用setTimeout在1000毫秒后调用,然后在平行的回调函数中输出结果,看一看整个过程花费了1 s还是2 s。
var异步=要求(“异步”); async.parallel ([ 函数(回调){ setTimeout(函数(){ 回调(null,“一”) },1000); }, 函数(回调){ setTimeout(函数(){ 回调(null, ' 2 ') },1000); } ), 函数(呃,结果){ console.log(结果); }); parallelLimit(任务、限制(回调))
parallelLimit函数和并行类似,但是它多了一个参数limit.限制参数限制任务只能同时并发一定数量,而不是无限制并发,示例如下:
async.parallelLimit ([ 函数(回调){ 回调(null,“一个”); }, 函数(回调){ 回调(null,“两”); } ), 2, 函数(呃,结果){ });
将示例中任务的回调函数用setTimeout在1000毫秒后调用,限制参数设置为1,然后在parallelLimit的回调函数中输出结果,看一看整个过程花费了1 s还是2 s。
var异步=要求(“异步”); async.parallelLimit ([ 函数(回调){ setTimeout(函数(){ 回调(null,“一个”); }, 1000); }, 函数(回调){ setTimeout(函数(){ 回调(null,“两”); }, 1000); } ), 1, 函数(呃,结果){ console.log(结果); }); 地图(科尔,iteratee callbackopt)
映射函数遍历传入的数组,并执行同样的操作,最终返回结果