Nodejs学习之async总结

 async的方法是流程控制包,主要提供的异步功能。

npm install async

 一、async.series 串行且无关联

var async  = require('async');

//======================串行且无关联

async.series([
    function(callback) {
        // do some stuff ...
        callback(null, 'one');
    },
    function(callback) {
        // do some more stuff ...
        callback(null, 'two');
    }
],
// optional callback
function(err, results) {
    // ['one', 'two']
    console.log(results);
});

async.series({
    one: function(callback) {
        setTimeout(function() {
            callback(null, 1);
        }, 200);
    },
    two: function(callback){
        setTimeout(function() {
            callback(null, 2);
        }, 100);
    }
},
function(err, results) {
    // {one: 1, two: 2}
    console.log(results);
});

二、async.waterfall 串行且关联

//===========串行且关联
//依次执行,前一个函数的输出为后一个函数的输入
//使用waterfall可以保证一序列函数执行的顺序,如果函数执行失败了,会直接中断处理流程。比较可靠的办法是,重试流程。 async.retry
async.waterfall([
    function(callback) {
        callback(null, 'one', 'two');
    },
    function(arg1, arg2, callback) {
        // arg1 为'one' and arg2 为'two'
        //retry(opts, task, callback)
        async.retry({times:5, interval:1000}, function(callback) {
            callback(null, 'three')
        }, function(err, result) {
            callback(err, result);
        }); 
    },
    function(arg1, callback) {  
        // arg1 为 'three'
        callback(null, 'done');
    }
], 
function (err, result) {
    // 'done'
    console.log(result);
});


function myFirstFunction(callback) {
    callback(null, 'one', 'two');
}
function mySecondFunction(arg1, arg2, callback) {
    // arg1 为 'one' and arg2 为 'two'
    callback(null, 'three');
}
function myLastFunction(arg1, callback) {
    // arg1 为 'three'
    callback(null, 'done');
}

console.time("waterfall方法");
// Or, with named functions:
async.waterfall([
    myFirstFunction,
    mySecondFunction,
    myLastFunction,
],
function (err, result) {
    // result now equals 'done'
    console.log(result);
    console.timeEnd("waterfall方法"); 
});

三、async.parallel 并行无关联

async.parallel([
    function(callback) {
        setTimeout(function() {
            callback(null, 'one');
        }, 500);
    },
    function(callback) {
        setTimeout(function() {
            callback(null, 'two');
        }, 100);
    }
],
function(err, results) {
    // +++++++ [ 'one', 'two' ]
    console.log("+++++++", results);
});


async.parallel({
    one: function(callback) {
        setTimeout(function() {
            callback(null, 1);
        }, 200);
    },
    two: function(callback) {
        setTimeout(function() {
            callback(null, 2);
        }, 100);
    }
}, 
function(err, results) {
    // ===== { two: 2, one: 1 }
    console.log("=====", results);
});

四、async.eachSeries

async.eachSeries(arrs, (arr, callback) => {
    //执行一些相应的操作
	callback();//当单前操作完成后使用callback执行下一个操作。
},(err,results)=>{
	//循环执行完成后可以执行这里的操作。
})

var arr = [300,600];
async.eachSeries(arr, function(item, callback) {

    setTimeout(function(){

        //这个函数告诉eachSeries函数,这个异步操作状态,是成功了,还是失败了,传(false)null表示这个异步成功完成,true(1)执行失败,还未执行的不再执行
        callback(null);
        console.log(item);

    }, item);

}, function(err) {

    //所有的异步成功执行完成,err等于null
    console.log(err);

});

用于循环异步操作并且是执行同一种方法,当一次执行完成后使用callback继续进行下一个操作,当整个异步函数执行完成后可以在下面按照顺序执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值