评论

收藏

[JavaScript] async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制

开发技术 开发技术 发布于:2021-08-06 12:05 | 阅读数:232 | 评论:0

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)
})


关注下面的标签,发现更多相似文章