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. jquery插件实现瀑布流

    jquery插件实现瀑布流<!DOCTYPE html><html lang="en"><head> <meta charset=&quo ...

  2. wordpress防止垃圾邮件方法

    wordpress防止垃圾邮件方法 安装NoSpamNX插件然后设置Operating mode 为 Block (recommended) save

  3. NanoPi NEO Plus2开发环境搭建

    1.前言 NanoPi NEO Plus2是友善电子推出的一款非常小巧精致的开源硬件,该开源硬件的CPU是基于Allwinner公司的64位四核ARM Cortex-A53处理器H5,并且内置了六核M ...

  4. 最新修改Oracle10gscott用户

    1.以system登录及输入自己设置口令; 2.更换sysdba身份: conn system/orcl as sysdba; 3.解锁scott用户(因装好默认是锁定的): alter user s ...

  5. C基本语法

    分号 ; 在C程序中,分好是语句结束符,每个语句必须以分好结束,它表明一个逻辑实体的结束 例如: printf("Hello, World! \n"); ; 注释 // 单行注释 ...

  6. 简洁的 Python Schema

    目录 Python Schema使用说明 1. Schema是什么? 2. 安装 1. 给Schema类传入类型(int.str.float等) 2. 给Schema类传入可调用的对象(函数.带__c ...

  7. 整理:WPF中XmlDataProvider的用法总结

    原文:整理:WPF中XmlDataProvider的用法总结 一.目的:了解XmlDataProvider中绑定数据的方法 二.绑定方式主要有三种: 1.Xaml资源中内置: <!--XPath ...

  8. php 获取当前IP地址

    function getIP() { return isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FO ...

  9. 树莓派安装window ioT

    下载安装器 https://developer.microsoft.com/zh-cn/windows/iot/Downloads 操作设备

  10. C# LINQ干掉for循环

    public void OldSum() { ; ; i < ; i++) { sum0 += i; } Assert.AreEqual(, sum0); } public void NewSu ...