Async:提供了大约20个函数,包括常用的 map, reduce, filter, forEach 等,
异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等,
对于异常判断:一旦某个异步调用产生了异常,结束调用,并将异常作为第一个参数传入给最终的回调函数,只有所有异步调用都正常完成时,才会将结果以数组形式传入。
安装:
npm install async
1. 异步无依赖串行执行:series
var async = require('async');
console.time('series');
async.series({
one:function(callback){
setTimeout(function () {
callback(null,'one');
},100)
},
two:function (callback) {
setTimeout(function () {
callback(null,'two');
},200)
},
three:function (callback) {
setTimeout(function () {
callback(null,'three');
},300)
}
},function (error,result) {
console.log('error:'+ error);
console.log('result:'+ JSON.stringify(result));
console.timeEnd('series');
});
- series()方法中传入的函数callback()并非由使用者指定而是async通过高阶函数的方式注入。
- 每个callback()执行时会将结果到result,然后执行下一个调用,直到结束所有调用。
- 最终的回调函数执行时,队列里的异步调用保存的结果以数组方式传入。
结果:运行时间为每个任务的总和
2. 异步有依赖串行执行:waterfall
waterfall: 当前一个的结果是后一个调用的输入时
var async = require('async');
console.time('waterfall');
async.waterfall([
function (callback) {
setTimeout(function () {
callback(null,'one');
},100)
},
function (onearg,callback) {
setTimeout(function () {
callback(null,onearg+'>>>two');
},200)
},
function (twoarg,callback) {
setTimeout(function () {
callback(null,twoarg+'>>>three');
},300)
}
], function (error,result) {
console.log('error:'+ error);
console.log('result:'+JSON.stringify(result));
console.timeEnd('waterfall');
});
结果:
3. 异步并行执行:parallel
并行提升性能,
var async = require('async');
console.time('parallel');
async.parallel({
one:function(callback){
setTimeout(function () {
callback(null,'one');
},100)
},
two:function (callback) {
setTimeout(function () {
callback(null,'two');
},200)
},
three:function (callback) {
setTimeout(function () {
callback(null,'three');
},300)
}
},function (error,result) {
console.log('error:'+ error);
console.log('result:'+ JSON.stringify(result));
console.timeEnd('parallel');
});
运行时间为最长的任务时间:
4. 自动处理:auto
在现实运用中,具有很多复杂的依赖关系,或是异步或是同步,auto()能根据依赖关系自动分析,以最佳的顺序执行这些业务。
学习参考:
深入浅出node
https://blog.csdn.net/qqhjqs/article/details/51913942
https://blog.csdn.net/pretent/article/details/45619503