JavaScript中使用异步实现异步控制

  

异步官方医生

  

介绍   

节点安装         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)      

映射函数遍历传入的数组,并执行同样的操作,最终返回结果

JavaScript中使用异步实现异步控制