1.Async介绍
sync是一个流程控制工具包。提供了直接而强大的异步功能。基于Javascript为Node.js设计,同一时候也能够直接在浏览器中使用。
Async提供了大约20个函数,包含经常使用的 map, reduce, filter, forEach 等,异步流程控制模式包含,串行(series),并行(parallel),瀑布(waterfall)等。
项目地址:https://github.com/caolan/async
2. Async安装
npm install async
3. Async函数介绍
基于async的0.2.9版本号。
async主要实现了三个部分的流程控制功能:
- 集合: Collections
- 流程控制: Control Flow
- 工具类: Utils
1). 集合: Collections
- detect: 用于取得集合中满足条件的第一个元素。
- sortBy: 对集合内的元素进行排序。根据每一个元素进行某异步操作后产生的值,从小到大排序。
- some: 当集合中是否有至少一个元素满足条件时,终于callback得到的值为true,否则为false.
- every: 假设集合里每一个元素都满足条件,则传给终于回调的result为true,否则为false
- concat: 将多个异步操作的结果合并为一个数组。
- each: 假设想对同一个集合中的所有元素都运行同一个异步操作。
扫描二维码关注公众号,回复:
6056046 查看本文章
- map: 对集合中的每一个元素,运行某个异步操作,得到结果。所有的结果将汇总到终于的callback里。与each的差别是,each仅仅关心操作不管最后的值。而map关心的最后产生的值。
- filter: 使用异步操作对集合中的元素进行筛选, 须要注意的是,iterator的callback仅仅有一个參数,仅仅能接收true或false。
- reject: reject跟filter正好相反。当測试为true时则抛弃
- reduce: 能够让我们给定一个初始值,用它与集合中的每一个元素做运算。最后得到一个值。reduce从左向右来遍历元素,假设想从右向左,可使用reduceRight。
2). 流程控制: Control Flow
- doUntil: doUntil与doWhilst正好相反,当test为false时循环。与true时跳出。
其他特性一致。
- forever: 不管条件循环运行。假设不出错,callback永远不被运行。
- waterfall: 按顺序依次运行一组函数。
每一个函数产生的值。都将传给下一个。
- series: 串行运行,一个函数数组中的每一个函数,每一个函数运行完毕之后才干运行下一个函数。
- parallel: 并行运行多个函数。每一个函数都是马上运行,不须要等待其他函数先运行。
传给终于callback的数组中的数据依照tasks中声明的顺序。而不是运行完毕的顺序。
- whilst: 相当于while,但当中的异步调用将在完毕后才会进行下一次循环。
- doWhilst: 相当于do…while, doWhilst交换了fn,test的參数位置,先运行一次循环。再做test推断。
- until: until与whilst正好相反,当test为false时循环,与true时跳出。其他特性一致。
- compose: 创建一个包含一组异步函数的函数集合,每一个函数会消费上一次函数的返回值。把f(),g(),h()异步函数,组合成f(g(h()))的形式。通过callback得到返回值。
- applyEach: 实现给一数组中每一个函数传同样參数,通过callback返回。假设仅仅传第一个參数,将返回一个函数对象,我能够传參调用。
- queue: 是一个串行的消息队列,通过限制了worker数量,不再一次性所有运行。当worker数量不够用时,新增加的任务将会排队等候。直到有新的worker可用。
- iterator: 将一组函数包装成为一个iterator,初次调用此iterator时。会运行定义中的第一个函数并返回第二个函数以供调用。
- apply: 能够让我们给一个函数预绑定多个參数并生成一个可直接调用的新函数,简化代码。
- nextTick: 与nodejs的nextTick一样,再最后调用函数。
- cargo: 一个串行的消息队列,相似于queue。通过限制了worker数量。不再一次性所有运行。不同之处在于。cargo每次会载入满额的任务做为任务单元,仅仅有任务单元中所有运行完毕后,才会载入新的任务单元。
- auto: 用来处理有依赖关系的多个任务的运行。
- times: 异步运行,times能够指定调用几次。并把结果合并到数组中返回
- timesSeries: 与time相似。唯一不同的是同步运行
3). 工具类: Utils
- memoize: 让某一个函数在内存中缓存它的计算结果。对于同样的參数。仅仅计算一次。下次就直接拿到之前算好的结果。
- unmemoize: 让已经被缓存的函数,返回不缓存的函数引用。
- dir: 与log相似,不同之处在于,会调用浏览器的console.dir()函数。显示为DOM视图。
- noConflict: 假设之前已经在全局域中定义了async变量,当导入本async.js时,会先把之前的async变量保存起来,然后覆盖它。仅仅用于浏览器端,在nodejs中没用。这里无法演示。
- log: 运行某异步函数。并记录它的返回值。日志输出。
假设你认为此文章对你实用,给我点动力。请我喝杯奶茶咯