var async = require('async');
// series 串形任务
console.time('cost')
async.series({
two:function(callback){
setTimeout(function(){
console.log('串形任务two');
//第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务
callback(null,'串形任务two 执行完毕');
},)
},
one:function(callback){
setTimeout(function(){
console.log('串形任务one');
callback(null,'串形任务one 执行完毕');
},)
},
},function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
console.log(err,seriesRes);
console.timeEnd('cost')
}) //parallel 并行任务
// 传递给最终的回调函数的是按任务生命顺序排列,而不是完成顺序
console.time('cost_p')
async.parallel({
two:function(callback){
setTimeout(function(){
console.log('并行任务two');
//第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务
callback(null,'并行任务two 执行完毕');
},)
},
one:function(callback){
setTimeout(function(){
console.log('并行任务one');
callback(null,'并行任务one 执行完毕');
},)
},
},function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
console.log(err,seriesRes);
console.timeEnd('cost_p')
}) // waterfall 瀑布形任务
console.time('cost_w')
async.waterfall([
function(callback){
setTimeout(function(){
console.log('瀑布形任务 1');
//第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务
callback(null,'咖啡');
},)
},
function(res,callback){
setTimeout(function(){
console.log('瀑布形任务 2');
callback(null,res+'+加糖');
},)
},
function(res,callback){
setTimeout(function(){
console.log('瀑布形任务 3');
callback(null,res+'+加牛奶');
},)
}
],function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
console.log(err,seriesRes);
console.timeEnd('cost_w')
}) //auto 多情况组合任务
// 例:做饭任务
console.time('做饭任务cost:')
async.auto({
water:function(callback){
callback(null,'水')
},
flour:function(callback){
callback(null,'面粉')
},
mix:['water','flour',function(res,callback){
callback(null,res.water+"+"+res.flour+'+和面');
}],
stream:['mix',function(res,cb){
cb(null,res.mix+'+蒸馒头')
}]
},function(err,seriesRes){
console.log(err,seriesRes);
console.timeEnd('做饭任务cost:')
})
async.forEach
var fs = require('fs');
var async = require('async');
var arr = [{
filename:'1.txt',cont:''
},{
filename:'2.txt',cont:''
},{
filename:'3.txt',cont:''
}]
async.forEach(arr,function(item,cb){ },function(err,res){
console.log(err,res)
})

async.each/ async.eachSeries  用法一样

sync.each/ async.eachSeries     each是并行,eachSeries是串行。。所以each的某个item抛出错误后其他的不影响,而eachSeries后面的就挂了。。

var pageNumArr = [,,,];
async.each(pageNumArr,function(offsetIndex,callback){
console.log(offsetIndex)
callback(null,'num:'+offsetIndex)
},function(errRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
// console.log(err,seriesRes)
console.log(errRes)
})

async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制的更多相关文章

  1. 珠峰培训node正式课--【笔记】|全局对象 | process | util | fs | stream 流

    全局对象: console  : __filename     ; __dirname     ; setTimeOut     ; setImmediate(把参数函数放在下一个环节执行) proc ...

  2. node 进程管理 child_process [spawn,exec] | 珠峰培训node正式课 网络爬虫

    run.js ; function set(){ i++ setTimeout(function(){ console.log(i) ){ set(); } },) }set(); child_pro ...

  3. 珠峰培训node 珠峰爬虫| cron 定时任务

    1.cron 定时任务 CronJob var CronJob = require('cron').CronJob; // 秒 分钟 时 天

  4. Node.js学习笔记(2)——关于异步编程风格

    Node.js的异步编程风格是它的一大特点,在代码中就是体现在回调中. 首先是代码的顺序执行: function heavyCompute(n, callback) { var count = 0, ...

  5. node核心:异步流程控制

    Node.js的异步是整个学习Node.js过程中重中之重. 1)异步流程控制学习重点 2)Api写法:Error-first Callback 和 EventEmitter 3)中流砥柱:Promi ...

  6. 多线程编程学习笔记——async和await(一)

    接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...

  7. 多线程编程学习笔记——async和await(二)

    接上文 多线程编程学习笔记——async和await(一) 三.   对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...

  8. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  9. es6学习笔记-async函数

    1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...

随机推荐

  1. ACM | 算法 | 快速幂

    目录 快速幂 快速幂取模 矩阵快速幂 矩阵快速幂取模 HDU1005练习 快速幂 ​ 幂运算:\(x ^ n\) ​ 根据其一般定义我们可以简单实现其非负整数情况下的函数 定义法: int Pow ( ...

  2. 【c++primer练习】 typedef与指针、常量和类型别名

    # c++primer 61页 typedef char* ptr ; cstr 是一个指向 char 的常量指针, 一种错误的理解是将语句等同于const char* ptr cstr; 但 ptr ...

  3. Go语言【项目】 websocket消息服务

    websocket消息服务 目的:搭建websocket服务,用浏览器与服务进行消息交互(写的第一个Go程序) 代码目录结构: 前端html页面: <!DOCTYPE html> < ...

  4. WebAPI 权限控制解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(三)

    21.1   数据服务 21.1.1基本操作功能 Phenixヾ的数据服务,提供了如下的基本操作: 功能 Type URI 参数 完整获取实体集合对象 GET api/Data 分页获取实体集合对象 ...

  5. C# vb .NET读取识别条形码线性条码code128

    code128是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准 ...

  6. statsvn使用小记

    准备工作 1.安装TortoiseSVN,在安装时需要安装svn命令行工具: 2.拉取svn代码: svn co https://svn.myserver.cn/svn/myproject1\trun ...

  7. 含有动态未知字段的 JSON 反序列化

    一般来说,正常的 json 长这个模样: { 'Name': 'Bad Boys', 'ReleaseDate': '1995-4-7T00:00:00', 'Genres': [ 'Action', ...

  8. Django:RestFramework之-------分页

    9.分页操作 分页,看第n页,每页显示n条数据 分页,在n个位置,向后查看n条数据. 加密分页,上一页和下一页 1.基于PageNumberPagination分页 1.路由: url(r'^(?P& ...

  9. element-ui 上传图片或视频时,先回显在上传

    <el-upload class="upload-demo" ref="vidos" :action="URL+'/api/post/file' ...

  10. android studio学习----构建编译

    项目创建成功后会自动下载Gradle,这个过程特别慢,建议翻墙.下载的Gradle在Windows平台会默认在 C:\Documents and Settings\<用户名>.gradle ...