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. 音频处理贤内助--libsndfile

    libsndfile是由Erik de Castro Lopo写的的广泛用于读写音频文件的C语言库.它支持的音频格式十分广泛并且能够自动的从一种格式到另外一种格式.它极大的方便了开发者,可以让开发者忽 ...

  2. GoLand2019 激活码

    此教程对最新2019版本GoLand有效!!! 本教程对windows.mac.ubuntu全系统可用 此教程实时更新,请放心使用:如果有新版本出现猪哥都会第一时间尝试激活: goland官网下载地址 ...

  3. 使用阿里云的图片识别成表格ocr(将图片表格转换成excel)

    为了简便财务总是要对照着别人发来的表格图片制作成自己的表格 图片识别 识别成表格 表格识别 ocr 使用阿里云api 购买(印刷文字识别-表格识别) https://market.aliyun.com ...

  4. JAVA 探究NIO

    事情的开始 1.4版本开始,java提供了另一套IO系统,称为NIO,(New I/O的意思),NIO支持面向缓冲区的.基于通道的IO操作. 1.7版本的时候,java对NIO系统进行了极大的扩展,增 ...

  5. winform注册功能

    注册按钮事件: private void btnRegister_Click(object sender, EventArgs e) { string username = txtUserName.T ...

  6. 系统设计Design For Failure思想

    系统设计Design For Failure思想 Complex systems fail in spectacular ways. Failure isn't a question of if, b ...

  7. GTX 750TI 使用 ffmpeg 时无法用 GPU HEVC(h.265) 进行加速

    官网版本好像不是能加速的,所以在github上找到一个已经带gpu加速的. https://github.com/illuspas/ffmpeg-hw-win32 GPU加速命令格式: ffmpeg. ...

  8. Hibernate框架笔记02_主键生成策略_一级缓存_事务管理

    目录 0. 结构图 1. 持久化类的编写规则 1.1 持久化和持久化类 1.2 持久化类的编写规则 2. 主键生成策略 2.1 主键的分类 2.2 主键生成策略 3. 持久化类的三种状态[了解] 3. ...

  9. TrieTree

    学习链接:https://blog.csdn.net/lisonglisonglisong/article/details/45584721 前缀树解决字符串前缀匹配问题,查找单词是否存在,统计以如“ ...

  10. JS:onmouseover 、onmouseout

    鼠标移动到P标签上时,改变文本和边框样式 <style type="text/css"> .onmouseover { color: red; border: 1px ...