async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制

var async = require('async');
// series 串形任务
console.time('cost')
async.series({
    two:function(callback){
        setTimeout(function(){
            console.log('串形任务two');
            //第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务
            callback(null,'串形任务two 执行完毕');
        },1000)
    },
    one:function(callback){
        setTimeout(function(){
            console.log('串形任务one');
            callback(null,'串形任务one 执行完毕');
        },2000)
    },
},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 执行完毕');
        },1000)
    },
    one:function(callback){
        setTimeout(function(){
            console.log('并行任务one');
            callback(null,'并行任务one 执行完毕');
        },2000)
    },
},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,'咖啡');
        },1000)
    },
    function(res,callback){
        setTimeout(function(){
            console.log('瀑布形任务 2');
            callback(null,res+'+加糖');
        },1000)
    },
    function(res,callback){
        setTimeout(function(){
            console.log('瀑布形任务 3');
            callback(null,res+'+加牛奶');
        },1000)
    }
],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:'1'
},{
    filename:'2.txt',cont:'2'
},{
    filename:'3.txt',cont:'3'
}]
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 = [3,2,1,0];
async.each(pageNumArr,function(offsetIndex,callback){
  console.log(offsetIndex)
  callback(null,'num:'+offsetIndex)
},function(errRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务
  // console.log(err,seriesRes)
  console.log(errRes)
})

原文地址:https://www.cnblogs.com/liujinyu/p/7354425.html