async.series(tasks, callback)

  • tasks可以是对象或数组,返回类型就是参数类型
  • tasks中传入回调函数的第一个值非空即停止后面函数执行
  • 按照顺序流程进行
async.series({
one: function (cb) {
cb(null, 'one')
},
two: function (cb) {
cb(null, 'two')
}
}, function (err, results) {
console.log(results);
})

async.waterfall(tasks, callback)

  • async.series类型
  • tasks中可以将结果向后传递
  • tasks参数仅可以为数组
async.waterfall([function(cb) {
cb(null, 'one')
}, function (data, cb) {
cb(null, data + ' two')
}], function (err, results) {
console.log(results);
})

async.parallel(tasks, callback)

  • tasks参数可以是数组或对象
  • tasks函数全部并行执行
  • 注意最终结果参数还是按照tasks中声明的顺序

async.parallelLimit(tasks, limit, callback)

  • async.parallel相同
  • limit参数限制最大并发数量

async.queue(work, concurrency)

  • 队列流程控制,加强版paralle()
  • 队列消息,限制work数量
  • 参数work是执行任务的回调函数形式, concurrency定义同时执行任务的数量
var async = require('async')
var count = 0; var queue = async.queue(function (task, cb) {
console.log('work is processing task: ', task.name);
cb();
}, 2) queue.push({name: 'one'}, function (err) {
setTimeout(function () {
console.log('finished processing foo');
}, 2000)
}) queue.push({name: 'two'}, function (err) {
setTimeout(function () {
console.log('finished processing two');
}, 1000)
}) queue.push({name: 'three'}, function (err) {
console.log('finished processing three');
}) queue.push({name: 'four'}, function (err) {
console.log('finished processing four');
}) //党最后一个任务交给work时调用,所以这里在name:four执行前调用
queue.empty = function () {
console.log('no more tasks wating');
} //执行完所有任务后调用
queue.drain = function () {
console.log('all tasks have been processed');
}

async.whilst(test, fn, callback)

  • 流程控制,相当于while
  • 适合以循环的方式执行异步操作
async.whilst(function () {
return count < 5
}, function (cb) {
count++;
setTimeout(function () {
cb(null, count)
}, 1000)
}, function (err, data) {
console.log(data);
})

async.doWhilst(fn, test, callback)

  • async.whilst类似, 相当于do...while语句

async.until(test, fn, callback)

  • async.whilst判断条件相反

async.doUntil(fn, test, callback)

  • async.doWhilst判断条件相反

npm-async使用的更多相关文章

  1. Elasticsearch的数据导出和导入操作(elasticdump工具),以及删除指定type的数据(delete-by-query插件)

    Elasticseach目前作为查询搜索平台,的确非常实用方便.我们今天在这里要讨论的是如何做数据备份和type删除.我的ES的版本是2.4.1. ES的备份,可不像MySQL的mysqldump这么 ...

  2. promise基础和进阶

    本文不对Promise的做过深的解析,只对基础的使用方法,然后会记录一些promise的使用技巧,可以巧妙的解决异步的常见问题. 在过去一直理解的是解决了一直异步回调的坑,但是用了npm async之 ...

  3. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  4. 小程序如何支持使用 async/await (构建npm版)

    前言 小程序本身是不支持async/await语法的,但有些应用场景,我们使用async/await会使得代码更简洁,也更易于维护,用过都知道是有多爽的.既然小程序不支持,那我们可以借助 fackbo ...

  5. npm 初学者教程

    Node.js 让 JavaScript 编写服务器端应用程序成为可能.它建立在 JavaScript V8(C++ 编写的) 运行时之上,所以它很快.最初,它旨在为应用程序提供服务器环境,但是开发人 ...

  6. [译]A Beginner’s Guide to npm — the Node Package Manager

    原文: http://www.sitepoint.com/beginners-guide-node-package-manager/ Installing Node.js 验证你的安装是否成功. $ ...

  7. npm报错Error: ENOENT, stat 'D:\NodeLearn\node-global'

    最近想试下当前的当红炸子鸡 Nodejs,在安装配置时,发生了下面的错误: C:\nodejs\npmjs\bin>cd .. C:\nodejs\npmjs>cd .. C:\nodej ...

  8. NodeJS包管理工具——npm入门

    如今每个语言体系中都有一个包管理工具,PHP的Composer,Ruby的gem,Python的pip,Java的Maven……当然还有Node.js的npm.有的人会奇怪为何要引入又一个新东西来让我 ...

  9. [转] Understanding JavaScript’s async await

    PS:Promise的用处是异步调用,这个对象使用的时候,call then函数,传一个处理函数进去,处理异步调用后的结果 Promise<Action>这样的对象呢,异步调用后的结果是一 ...

  10. [转] npm命令概述

    PS:问题,nvm找不到正确的下载server NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm ls-remote NVM_NODEJS_ORG_MI ...

随机推荐

  1. acm的ubuntu (ubuntu16.04 安装指南,chrome安装,vim配置,git设置和github,装QQ)

    日常手贱把ubuntu14.04更新到了16.04,然后就game over了.mdzz,不然泥萌也看不到这篇博客了=.= 然后花了些时间重装了一个16.04版的,原来那个14.04的用可以用,就是动 ...

  2. icomoon图标的使用

    这里的图标可以自己定义 网址:https://icomoon.io/app/#/select/ 定义完后,自己下载下来 引用:    <link href="css/style.css ...

  3. 2 column数据构成主键的表转化为1 column为主键的表

    问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93张三 德语 null李四 语文 74李四 数学 84李四 物理 94李四 英语 80想变成(得到如 ...

  4. 手机电脑Mac地址修改方法

    1.什么是Mac地址? MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在O ...

  5. HTTP缓存

    本文是<HTTP权威指南>读书笔记 Web缓存是可以自动保存常见文档副本的设备.当Web请求抵达缓存时,如果本地在“已缓存”的的副本,就可以从本地存储设备而不是原始服务器中提取这个文档.使 ...

  6. IP变化,SVN和数据库的修改

    最近公司换了运营商,将启用新的IP地址,将以前项目的端口映射处理好之外,还需要切换SVN的地址. 项目开发中有可能要修改SVN的IP地址,entries文件里面包含svn服务器的地址信息.每个文件夹都 ...

  7. 关于a标签自身的click事件所带来的一些影响

    众所周知a标签自身带有点击事件<a href="#"></a>从它本身的特性来讲并没有什么不好的影响,但是如果你在a标签里又加入onclick事件则< ...

  8. [转载]js中return的用法

    一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return;  在大多数情况下,为事件处理函 ...

  9. MySql: 常见sql语句

    1. show create table mysql> show create table t \G*************************** 1. row ************ ...

  10. Python AES - base64 加解密

    首先python引用AES加密 from Crypto.Cipher import AES 需要先安装  Crypto  模块, 可以使用 easy_install 进行安装   会自动去官网进行搜索 ...