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. 为什么腾讯有QQ,还要推出微信?

    在微信刚出现时候,很多人奇怪,为什么腾讯有QQ,还要推出微信? 一开始,我也认为它与QQ没有什么区别.有这种看法,是因为绝大多数时候,我都仅仅只使用即时聊天功能,微信上有的语音.视频.文字等等,这些在 ...

  2. css块级元素和行内元素详细解析

    块级元素和行内元素是布局中常见的两种基本元素,但是未必有很多人深入的研究它们的细微差别. 常见块级元素:div  p  form ul ol li 等: 常见的行内元素:span stronh em; ...

  3. Maven配置ojdbc14-10.2.0.4.0.jar

    对于oralce的jdbc驱动,在maven上搜索到把pom配置复制到pom.xml里进行引用的时候出现下面这种情况 <dependency> <groupId>com.ora ...

  4. Redux进阶(一)

    State的不可变化带来的麻烦 在用Redux处理深度复杂的数据时会有一些麻烦.由于js的特性,我们知道当对一个对象进行复制时实际上是复制它的引用,除非你对这个对象进行深度复制.Redux要求你每次你 ...

  5. idapython import 'site' failed

    打开IDA出现这个错误提示,问题根源是IDA找不到python,安装2.7版本的python并设置%PYTHONHOME%变量为python安装目录就可以了 如果已经安装了python可以在命令行下用 ...

  6. 理解ASP.NET Core验证模型(Claim, ClaimsIdentity, ClaimsPrincipal)不得不读的英文博文

    这篇英文博文是 Andrew Lock 写的 Introduction to Authentication with ASP.NET Core . 以下是简单的阅读笔记: -------------- ...

  7. Spring之旅第四篇-注解配置详解

    一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会有错的. 上一篇Spring的配置博客 ...

  8. TabTopAutoTextSizeLayout【自定义文字字号区域(动态选项卡数据且可滑动)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现可滑动效果.[实际情况中建议使用RecyclerView] 对<TabTo ...

  9. vue-cli项目使用mock数据的方法(借助express)

    前言 现如今前后端分离开发越来越普遍,前端人员写好页面后可以自己模拟一些数据进行代码测试,这样就不必等后端接口,提高了我们开发效率.今天就来分析下前端常用的mock数据的方式是如何实现的. 主体 项目 ...

  10. DirectX11 初探XMVECOTR&XMMATRIX

    初探DX11的数学库:向量XMVECOTR,矩阵XMMATRIX |XMVECTOR(XNA数学库的向量) DirectX中的一个核心数据类型为 XMVECTOR对它的运算可以使用SIMD指令集加速( ...