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)
    })

  • 相关阅读:
    三种适配器模式 总结和使用场景
    (面试)Statement和PrepareStatement有什么区别
    知识点:Oracle+表连接方式(内连接-外连接-自连接)+详解 来自百度文库
    (面试题)有关Integer
    sessionId与cookie 的关系(百度文库)
    (面试)将1到100的随机数插入到长度为100的数组中,保证不会有重复元素
    如何通过sql的insert语句插入大量字符串到oracle的clob字段?
    (面试题)synchronized 和 java.util.concurrent.locks.Lock 的异同
    【转】java io 流 设计模式
    (面试题)两个对象值相同 (x.equals(y) == true) ,但却可有不同的 hash code ,这 句话对不对
  • 原文地址:https://www.cnblogs.com/liujinyu/p/7354425.html
Copyright © 2011-2022 走看看