async官方DOCasync官方DOC介绍
介绍node安装
npm install async --save
npm install async --save使用var async = require('async')
var async = require('async')js文件
js文件https://github.com/caolan/async/tree/master/disthttps://github.com/caolan/async/tree/master/distasync提供了很多函数用于异步流程控制,下面是async核心的几个函数,完整的函数请看async官方DOCasync官方DOC
async.map(['file1','file2','file3'], fs.stat, function(err, results) {

// results is now an array of stats for each file
});

async.filter(['file1','file2','file3'], function(filePath, callback) {
fs.access(filePath, function(err) {

callback(null, !err)
});
}, function(err, results) {

// results now equals an array of the existing files
});

async.parallel([

function(callback) { ... },

function(callback) { ... }
], function(err, results) {

// optional callback
});

async.series([

function(callback) { ... },

function(callback) { ... }
]);
async.map(['file1','file2','file3'], fs.stat, function(err, results) {

// results is now an array of stats for each file
});

async.filter(['file1','file2','file3'], function(filePath, callback) {
fs.access(filePath, function(err) {

callback(null, !err)
});
}, function(err, results) {

// results now equals an array of the existing files
});

async.parallel([

function(callback) { ... },

function(callback) { ... }
], function(err, results) {

// optional callback
});

async.series([

function(callback) { ... },

function(callback) { ... }
]);series串行
series串行series的作用就是按照顺序一次执行。
async.series([
function(callback) {

setTimeout(function() {

callback(null, 1)

}, 2000);

},
function(callback) {

callback(null, 2);
}],
function(err, results) {

console.log(results);
});
async.series([
function(callback) {

setTimeout(function() {

callback(null, 1)

}, 2000);

},
function(callback) {

callback(null, 2);
}],
function(err, results) {

console.log(results);
});输出结果为[ 1, 2 ]
series函数的第一个参数可以是一个数组也可以是一个JSON对象,参数类型不同,影响的是返回数据的格式。
async.series({

one: function(callback){


callback(null, 1);

},

two: function(callback){


callback(null, 2);

}
},function(err, results) {

console.log(results);
});
async.series({

one: function(callback){


callback(null, 1);

},

two: function(callback){


callback(null, 2);

}
},function(err, results) {

console.log(results);
});输出为{one: 1, two: 2}
waterfall瀑布流
waterfall瀑布流waterfall和series函数都是按照顺序执行,不同之处是waterfall每个函数产生的值都可以传递给下一个函数,series不可以。
async.waterfall([

function(callback) {


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

},

function(arg1, arg2, callback) {


// arg1 now equals 'one' and arg2 now equals 'two'


console.log('function 2')


console.log('arg1: ' + arg1)


console.log('arg2: ' + arg2)


callback(null, 'three');

},

function(arg1, callback) {


console.log('function 3')


console.log('arg1: ' + arg1)



// arg1 now equals 'three'


callback(null, 'done');

}
], function(err, result) {

// result now equals 'done'

console.log(result);
});
async.waterfall([

function(callback) {


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

},

function(arg1, arg2, callback) {


// arg1 now equals 'one' and arg2 now equals 'two'


console.log('function 2')


console.log('arg1: ' + arg1)


console.log('arg2: ' + arg2)


callback(null, 'three');

},

function(arg1, callback) {


console.log('function 3')


console.log('arg1: ' + arg1)



// arg1 now equals 'three'


callback(null, 'done');

}
], function(err, result) {

// result now equals 'done'

console.log(result);
});输出
function 2
arg1: one
arg2: two
function 3
arg1: three
done

function 2
arg1: one
arg2: two
function 3
arg1: three
done
waterfall第一个参数只能为数组。当中途有函数出错,其err直接传给最终callback,结果被丢弃,后面的函数不再执行。parallel(tasks, [callback])
parallel(tasks, [callback])paraller函数是并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。
传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序。
async.parallel([

function(callback){

callback(null, 'one');

},

function(callback){

callback(null, 'two');

}
],
function(err, results){

});
async.parallel([

function(callback){

callback(null, 'one');

},

function(callback){

callback(null, 'two');

}
],
function(err, results){

});tasks参数可以是一个数组或是json对象,和series函数一样,tasks参数类型不同,返回的results格式会不一样。将示例中tasks的回调函数用setTimeout在1000毫秒后调用,然后在parallel的回调函数中输出results,看一看整个过程花费了1s还是2s。
var async=require("async");
async.parallel([

function(callback){

setTimeout(function(){

callback(null, 'one')

},1000);

},

function(callback){

setTimeout(function(){

callback(null, 'two')

},1000);

}
],
function(err, results){

console.log(results);
});
var async=require("async");
async.parallel([

function(callback){

setTimeout(function(){

callback(null, 'one')

},1000);

},

function(callback){

setTimeout(function(){

callback(null, 'two')

},1000);

}
],
function(err, results){

console.log(results);
});parallelLimit(tasks, limit, [callback])
parallelLimit(tasks, limit, [callback])parallelLimit函数和parallel类似,但是它多了一个参数limit。 limit参数限制任务只能同时并发一定数量,而不是无限制并发,示例如下:
async.parallelLimit([

function(callback){

callback(null, 'one');

},

function(callback){

callback(null, 'two');

}
],
2,
function(err, results){
});
async.parallelLimit([

function(callback){

callback(null, 'one');

},

function(callback){

callback(null, 'two');

}
],
2,
function(err, results){
});将示例中tasks的回调函数用setTimeout在1000毫秒后调用,limit参数设置为1,然后在parallelLimit的回调函数中输出results,看一看整个过程花费了1s还是2s。
var async=require("async");
async.parallelLimit([

function(callback){

setTimeout(function(){

callback(null, 'one');

}, 1000);

},

function(callback){

setTimeout(function(){

callback(null, 'two');

}, 1000);

}
],
1,
function(err, results){

console.log(results);
});
var async=require("async");
async.parallelLimit([

function(callback){

setTimeout(function(){

callback(null, 'one');

}, 1000);

},

function(callback){

setTimeout(function(){

callback(null, 'two');

}, 1000);

}
],
1,
function(err, results){

console.log(results);
});map(coll, iteratee, callbackopt)
map(coll, iteratee, callbackopt)map函数遍历传入的数组,并执行同样的操作,最终返回结果cool:数组
iteratee:对数组每一项要执行的函数
callbackopt:回调函数

async.map([1, 2, 3, 4, 5],

function(item, callback) {


callback(null, item + 5)

},

function(err, result) {


console.log(result)

})
async.map([1, 2, 3, 4, 5],

function(item, callback) {


callback(null, item + 5)

},

function(err, result) {


console.log(result)

})[ 6, 7, 8, 9, 10 ]以上就是本文的全部内容,希望对大家的学习有所帮助。