• async 异步流程控制规则


    github 学习async网址 : https://github.com/caolan/async/

    1.Async 函数介绍

    async 主要实现了三个部分的流程控制功能

    1.集合:Collections

    2.流程控制:Control Flow

    3.工具类:Utils

    1:集合 Collections 

    each 如果相对同一个集合中的所有元素都执行同一个异步操作

    map 对集合中的每一个元素,执行某个异步操作,得到结果。所有结果将汇总到最终的callback 里 与 each 的区别是 ,each 只关心操作不管最后的值,而map 关心的时候最后产生的值

    filter 使用异步操作 对集合的元素进行筛选,需要注意的是,iterator 与 callback只有一个参数,只能接收true 或 false 

    reject reject跟filter正好相反

    reduce 可以给我们定一个初始值,用它与集合中的每一个元素做运算,最后得到一个值,reduce 从左向右来遍历元素,如果想从右向左,可以使用reduceRight

    detect:用于取得集合中满足条件的第一个元素

    concat:将多个异步操作的结果合并为一个数组

    2.控制流程 Control Flow

    series:串行执行,一个函数数组中的每个函数,每一个函数执行完成之后才能执行下一个函数。

    parallel:并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行,传给最终callback 的数组中的数据按照tasks 声明的顺序,而不是执行完成的顺序。

    whilst:相当于while .但其中的异步调用将在完成后才会进行下一次循环

    forever 无论条件循环执行 如果不出错 callback 永远不会被执行

    waterfall 按顺序 一次执行一组函数,每个函数产生的值 都将传给下一个。

    3.工具类 Utils

    memoize : 让某一个函数在内存中缓存它的计算结果,对于相同的参数,只计算一次,下次就直接拿到只算好的结果。

    unmemoize:让已经被缓存的函数,返回不缓存的函数引用

    log:执行某异步函数,并记录它的返回值,日志输出

    dir:与log类似,不同之处在于 会调用浏览器的console.dir()函数,显示为dom视图

    noConflict 如果之前在全局定义了async 变量,当导入本async.js 时,会先把之前的async变量保存起来,然后覆盖它,仅仅用于浏览器端,在nodejs 中没有

    ==================================================================================

    series 函数 串行执行

    async.series({
    one:function(callback) {
    callback(null,'one');
    },
    two:function(callback) {
    callback(null,'two');
    },
    three:function(callback){
    callback(null,'three');
    }
    }, function(err, results) {
    console.log("=======================");
    console.log(results);  //{ one: 'one', two: 'two', three: 'three' }
    });

    数组形式的例子:

    async.series([
    function(callback) {
    callback(null,'one');
    },
    function(callback) {
    callback(null,'two');
    },
    function(callback){
    callback(null,'three');
    }
    ], function(err, results) {
    console.log("=======================");
    console.log(results); //['one','two','three']
    });

    series 函数第一个参数可以是一个数组,也可以是一个json 对象

    waterfall 函数 ,瀑布流

    waterfall 是按照顺序执行,每个函数产生的值都将传给下一个函数

    async.waterfall([

      function(callback){

        callback(null,'one','two');

      },

      function(arg1,arg2,callback){

     

        callback(null,'three');

      }, 

      function(arg1,callback){

        callback(null,'done');

      },

    ],function(err,result){

      console.log(result);//done

    })

    waterfall 的tasks 参

    数(数组内的函数)只能是 数组类型的

    当中途有函数出错,其err 直接传给callback,结果被丢弃,后面的函数不再执行

    parallel(tasksm[callback])

    paralle 函数是并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行

    传给最终callback的数组中数据按照tasks 中声明的顺序,而不是执行完的顺序,实例如下

    async.parallel([
    function(callback){
    console.log("1111111",req.query.page);
    if(req.query.page == 4){
    callback(null,'one');
    }else{
    console.log("0000000000000000000");
    callback(null);
    }
    },
    function(callback){
    callback(null,'two');
    },
    function(callback){
    callback(null,'threee');
    },
    function(callback){
    callback(null,'four');
    }
    ],function(err,results){
    console.log(results);
    })

  • 相关阅读:
    【NIPS 2018】完整论文下载链接
    【今日CV 视觉论文速览】30 Nov 2018
    【超好玩的在线AI项目】浏览器里玩AI------持续更新
    hdu 4035 Maze 概率DP
    hdu 4089 Activation 概率DP
    hdu 4405 Aeroplane chess 概率DP
    zoj 3329 One Person Game 概率DP
    poj 2096 Collecting Bugs 概率DP
    poj 3744 Scout YYF I
    2013 Multi-University Training Contest 5 Partition
  • 原文地址:https://www.cnblogs.com/zerohu/p/5113060.html
Copyright © 2020-2023  润新知