Async介绍
Async是一个流程控制工具包,提供了直接而强大的异步功能。基于Javascript为Node.js设计,同时也可以直接在浏览器中使用。
Async提供了大约20个函数,包括常用的map, reduce, filter, forEach 等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等。
项目地址:https://github.com/caolan/async
Async函数介绍
基于async的0.2.9版本。
async主要实现了三个部分的流程控制功能:
集合: Collections
流程控制: Control Flow
工具类: Utils
1). 集合: Collections
each: 如果想对同一个集合中的所有元素都执行同一个异步操作。
map: 对集合中的每一个元素,执行某个异步操作,得到结果。所有的结果将汇总到最终的callback里。与each的区别是,each只关心操作不管最后的值,而map关心的最后产生的值。
filter: 使用异步操作对集合中的元素进行筛选, 需要注意的是,iterator的callback只有一个参数,只能接收true或false。
reject: reject跟filter正好相反,当测试为true时则抛弃
reduce: 可以让我们给定一个初始值,用它与集合中的每一个元素做运算,最后得到一个值。reduce从左向右来遍历元素,如果想从右向左,可使用reduceRight。
detect: 用于取得集合中满足条件的第一个元素。
sortBy: 对集合内的元素进行排序,依据每个元素进行某异步操作后产生的值,从小到大排序。
some: 当集合中是否有至少一个元素满足条件时,最终callback得到的值为true,否则为false.
every: 如果集合里每一个元素都满足条件,则传给最终回调的result为true,否则为false
concat: 将多个异步操作的结果合并为一个数组。
2). 流程控制: Control Flow
series: 串行执行,一个函数数组中的每个函数,每一个函数执行完成之后才能执行下一个函数。
parallel: 并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序。
whilst: 相当于while,但其中的异步调用将在完成后才会进行下一次循环。
doWhilst: 相当于do…while,doWhilst交换了fn,test的参数位置,先执行一次循环,再做test判断。
until: until与whilst正好相反,当test为false时循环,与true时跳出。其它特性一致。
doUntil: doUntil与doWhilst正好相反,当test为false时循环,与true时跳出。其它特性一致。
forever: 无论条件循环执行,如果不出错,callback永远不被执行。
waterfall: 按顺序依次执行一组函数。每个函数产生的值,都将传给下一个。
compose: 创建一个包括一组异步函数的函数集合,每个函数会