zoukankan      html  css  js  c++  java
  • 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)
    })

  • 相关阅读:
    二维数组
    快速排序
    冒泡排序2
    对char类型数组的英文字母进行冒泡排序
    对char类型的数组进行冒泡排序
    冒泡排序
    对数组随机赋值,并输出(Arrays.toString(arr))
    数组声明的几种方式以及length属性
    猜拳游戏二
    二维小波包重构wprec2wprcoef
  • 原文地址:https://www.cnblogs.com/liujinyu/p/7354425.html
Copyright © 2011-2022 走看看