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。

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

  • 相关阅读:
    数据分析的5层解读,报表仍是有效的落地实践!
    rex 传文件改变用户属主
    rex 通过--parameter1=dbcdefg传参
    rex 给shell 脚本传参
    rex run 传参
    rex ssh公钥认证
    eclipse maven工程中src/main/resources目录下创建的文件夹是包图标的解决方法
    数据分析的三层需求
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value
    java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
  • 原文地址:https://www.cnblogs.com/chenyudi/p/13366307.html
Copyright © 2011-2022 走看看