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。

這樣讓我們在開發中更好的控制非同步操作。

 

Tags: