zoukankan      html  css  js  c++  java
  • node的async模块

    废话不多说,直接开始

    这个模块有几种方法。分别用于的不通的情况自己喜欢怎么用就怎么用

    第一个方法,series  这个方法用于串行切无关联。什么意思那就是,里面的方法是一个一个执行的,每一个方法相互不干扰。没有关系

    使用起来也是很简单,我们看一下下面的内容

    
    
    async.series({
        fun1:(callback) =>{
            console.log('one');
            callback(null,{'name':'cyd'});
        },
        fun2:(callback) =>{
            console.log('二');
            callback(null,{'age':20});
        },
        fun3:(callback) =>{
            console.log('三');
            callback(null,{'phone':'15655243356'});
        }
    },function(err,res){
        if(err){
            console.log('err:'+err);
        }else{
            console.log(res);
            // {
            //     fun1: { name: 'cyd' },
            //     fun2: { age: 20 },
            //     fun3: { phone: '15655243356' }
            // }
        
        var arr = [];
            for(var item in res){
                arr.push(res[item])
            }
            console.log('return:'+ JSON.stringify(arr));
        //  return:[{"name":"cyd"},{"age":20},{"phone":"15655243356"}]
     
        }
    })
     

    在上面我们进行了他们一个一个执行相互不干扰,在执行完成以后,结果以对象的方式返回到回调中。

    第二个是并行方法parallel

    这个的意思就是,里面的方法是一是一起执行的。他们也是相互不干扰的,结果以对象的方式返回到回调中。

    var async = require("async");
    
    async.parallel({
        fun1:(callback) =>{
            console.log('one');
            callback(null,{'name':'cyd'});
        },
        fun2:(callback) =>{
            console.log('二');
            callback(null,{'age':20});
        },
        fun3:(callback) =>{
            console.log('三');
            callback(null,{'phone':'15655243356'});
        }
    },function(err,res){
        if(err){
            console.log('err:'+err);
        }else{
         console.log(res);
    // { fun1: { name: 'cyd' },fun2: { age: 20 }, fun3: { phone: '15655243356' }}
    var arr = [];
            for(var item in res){
                arr.push(res[item])
            }
            console.log('return:'+ JSON.stringify(arr));  //return:[{"name":"cyd"},{"age":20},{"phone":"15655243356"}]
            console.timeEnd('parallel');
        }
    })

     上面的方法都是同时执行的。这样会大大的减少运行时间。

    下一个方法

    waterfall 这个方法也是串行的但是这个下一个方法必须接受上一个方法的返回值。
    async.waterfall([
        (call) =>{
            call(null,'one')
        },
        (one,call) =>{
            call(null,one+'| two')
        },
        (two,call) =>{
            call(null,two+'| three')
        }
    ],function(err,res){
        if(err){
            console.log(err);
        }else{
            console.log(res);   //one |two | three
    } })

    这个方法串行的写法必须以数组的方式去写。

    下一个是auto的方法这个方法可以串行和并行放在一起里面可以有串行和并行

    async.auto({
        funa:function(callback){
            console.log('我是第一个');
            setTimeout(()=>{
                callback(null,{'name':'玉帝'})
            },2000)
        },
        funb:function(callback){
            console.log('我也是第一个执行');
            setTimeout(() =>{
                callback(null,{'age':22});
            },1000)
        },
        func:["funa", function(result,callback){
            console.log('我是在第二个执行完执行');
            setTimeout(() =>{
                callback(null,{'phone':'15655321145'})
            },2000)
        }],
        fund:['func',function(result,callback){
            console.log('我是最后一个执行');
            setTimeout(() =>{
                callback(null,{'password':'yu1234560.'});
            },3000)
        }]
    },
        function(err,res){
            if(err){
                console.log('错误:'+err);
            }else{
                console.log('返回值:'+ JSON.stringify(res));
            }
    
        }
    )

    在上面的代码中,funa和funb是一起执行,func的写法是说,当funb执行完成开始执行func,func执行完成,执行fund。

    这样让我们在开发中更好的控制异步操作。

  • 相关阅读:
    找出数组中最长的连续数字序列(JavaScript实现)
    从数组中选出和等于固定值的n个数(JavaScript实现)
    比较任意两个JSON串是否相等(比较对象是否相等)JAVA版
    freshcodecolor纯正则实现的在线代码着色(高亮)
    最新QQ强制聊天代码,同时可判断好友关系
    (转)spring异常抛出触发事务回滚策略
    (转)Java回收对象的标记 和 对象的二次标记过程
    (转)调用System.gc没有立即执行的解决方法
    java线程池与五种常用线程池策略使用与解析
    (转)Spring事务管理详解
  • 原文地址:https://www.cnblogs.com/chenyudi/p/13366307.html
Copyright © 2011-2022 走看看