async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制
var async = require('async'); // series 串形任务 console.time('cost') async.series({ two:function(callback){ setTimeout(function(){ console.log('串形任务two'); //第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务 callback(null,'串形任务two 执行完毕'); },1000) }, one:function(callback){ setTimeout(function(){ console.log('串形任务one'); callback(null,'串形任务one 执行完毕'); },2000) }, },function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务 console.log(err,seriesRes); console.timeEnd('cost') }) //parallel 并行任务 // 传递给最终的回调函数的是按任务生命顺序排列,而不是完成顺序 console.time('cost_p') async.parallel({ two:function(callback){ setTimeout(function(){ console.log('并行任务two'); //第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务 callback(null,'并行任务two 执行完毕'); },1000) }, one:function(callback){ setTimeout(function(){ console.log('并行任务one'); callback(null,'并行任务one 执行完毕'); },2000) }, },function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务 console.log(err,seriesRes); console.timeEnd('cost_p') }) // waterfall 瀑布形任务 console.time('cost_w') async.waterfall([ function(callback){ setTimeout(function(){ console.log('瀑布形任务 1'); //第一个参数 错误原因,当为真时,接收函数err参数接收到原因,并定为报错,停止执行后边的任务 callback(null,'咖啡'); },1000) }, function(res,callback){ setTimeout(function(){ console.log('瀑布形任务 2'); callback(null,res+'+加糖'); },1000) }, function(res,callback){ setTimeout(function(){ console.log('瀑布形任务 3'); callback(null,res+'+加牛奶'); },1000) } ],function(err,seriesRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务 console.log(err,seriesRes); console.timeEnd('cost_w') }) //auto 多情况组合任务 // 例:做饭任务 console.time('做饭任务cost:') async.auto({ water:function(callback){ callback(null,'水') }, flour:function(callback){ callback(null,'面粉') }, mix:['water','flour',function(res,callback){ callback(null,res.water+"+"+res.flour+'+和面'); }], stream:['mix',function(res,cb){ cb(null,res.mix+'+蒸馒头') }] },function(err,seriesRes){ console.log(err,seriesRes); console.timeEnd('做饭任务cost:') })
async.forEach
var fs = require('fs'); var async = require('async'); var arr = [{ filename:'1.txt',cont:'1' },{ filename:'2.txt',cont:'2' },{ filename:'3.txt',cont:'3' }] async.forEach(arr,function(item,cb){ },function(err,res){ console.log(err,res) })
async.each/ async.eachSeries 用法一样
sync.each/ async.eachSeries each是并行,eachSeries是串行。。所以each的某个item抛出错误后其他的不影响,而eachSeries后面的就挂了。。
var pageNumArr = [3,2,1,0]; async.each(pageNumArr,function(offsetIndex,callback){ console.log(offsetIndex) callback(null,'num:'+offsetIndex) },function(errRes){//如果callback第一个参数为真,err接收到第一个参数,判为任务错误,终止后续任务 // console.log(err,seriesRes) console.log(errRes) })