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: 假设想对同一个集合中的所有元素都运行同一个异步操作。

  • 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: 运行某异步函数。并记录它的返回值。日志输出。

          假设你认为此文章对你实用,给我点动力。请我喝杯奶茶咯

node js 异步运行流程控制模块Async介绍的更多相关文章

  1. 使用events.EventEmitter 控制Node.js 程序执行流程

    使用events.EventEmitter 控制Node.js 程序执行流程 标题写的可能也不太对,大家领会精神: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. ...

  2. Node.js异步处理CPU密集型任务

    Node.js异步处理CPU密集型任务 Node.js擅长数据密集型实时(data-intensive real-time)交互的应用场景.然而数据密集型实时应用程序并非仅仅有I/O密集型任务,当碰到 ...

  3. node.js异步编程的几种模式

    Node.js异步编程的几种模式 以读取文件为例: 1.callback function const fs = require('fs'); //callback function fs.readF ...

  4. 深入理解node.js异步编程:基础篇

    ###[本文是基础内容,大神请绕道,才疏学浅,难免纰漏,请各位轻喷] ##1. 概述 目前开源社区最火热的技术当属Node.js莫属了,作为使用Javascript为主要开发语言的服务器端编程技术和平 ...

  5. node.js异步编程解决方案之Promise用法

    node.js异步编程解决方案之Promise var dbBase = require('../db/db_base'); var school_info_db = require('../db/s ...

  6. [Node.js与数据库]node-mysql 模块介绍

    [Node.js与数据库]node-mysql 模块介绍   转载至:https://itbilu.com/nodejs/npm/NyPG8LhlW.html#multiple-statement-q ...

  7. [Node.js] Promise,Q及Async

    原文地址:http://www.moye.me/2014/12/27/promise_q_async/ 引子 在使用Node/JS编程的时候,经常会遇到这样的问题:有一连串的异步方法,需要按顺序执行, ...

  8. Node.js 异步异闻录

    本文首发在个人博客:http://muyunyun.cn/posts/7b9fdc87/ 提到 Node.js, 我们脑海就会浮现异步.非阻塞.单线程等关键词,进一步我们还会想到 buffer.模块机 ...

  9. Node.js 异步模式浅析

    注:此文是node.js实战读后的总结. 在平常的脚本语言中都是同步进行的,比如php,服务器处理多个请求的方法就是并行这些脚本.多任务处理,多线程等等.但是这种处理方式也有一个问题:每一个进程或者线 ...

随机推荐

  1. linux操作系统的前世今生

    linux操作系统是李纳斯-拖瓦兹于1970年正式发布第一个真正的内核版本,他也称Linux之父,Linux是由Unix发展而来,发展到现在Linux操作系统凭借着良好的性能和稳定性已被linux已被 ...

  2. SVN的安装与配置

    单独安装 SVN:1.安装:yum -y install subversionmkdir -p /data/svn/ 创建创库目录svnadmin create /data/svn/repos 构建版 ...

  3. .NET 基金会完成第一次全面改选

    .NET基金会是一个独立的组织,支持.NET社区和开源,旨在拓宽和加强.NET生态系统和社区.这可以通过多种方式完成,包括项目指导,指导,法律和营销帮助,技术和财务支持设置等,2014年微软组织成立. ...

  4. PHP面向对象特性

    目录 创建对象 成员属性 成员方法 构造方法 析构方法 垃圾回收机制 访问修饰符 魔术方法 对象比较 继承 重载 属性重载 方法重写 属性重写 静态属性 静态方法 多态 类型约束 抽象类 接口 fin ...

  5. PHP全栈学习笔记2

    php概述 什么是php,PHP语言的优势,PHP5的新特性,PHP的发展趋势,PHP的应用领域. PHP是超文本预处理器,是一种服务器端,跨平台,HTML嵌入式的脚本语言,具有c语言,Java语言, ...

  6. Python基础(random模块)

    random 常用的方法: #Author : Kelvin #Date : 2019/1/6 15:33 import random print(random.random()) #产生0-1之间的 ...

  7. 数据结构系列(4)之 B 树

    本文将主要讲述另一种树形结构,B 树:B 树是一种多路平衡查找树,但是可以将其理解为是由二叉查找树合并而来:它主要用于在不同存储介质之间查找数据的时候,减少 I/O 次数(因为一次读一个节点,可以读取 ...

  8. c# String ,String[] 和 List<String>之间的转换

    C#对字符串进行处理时,经常需要进行String,String[]和List<String>之间的转换 本文分析一下它们的差异和转换 一. 1. String > String[] ...

  9. Docker 容器镜像删除

    1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: docker ...

  10. .net MVC +EF+VUE做回合制游戏(二)

    Emmm,游戏中的属性购买页面 话不多说先上代码 <form id="vue" action="/ltgdGame.Web/Main/Index" met ...