zoukankan      html  css  js  c++  java
  • nodejs async异步常用函数总结

    nodejs框架类库很多,“流程控制”本来是件比较简单的事,但是对于nodejs的异步架构的实现方法,对于需要同步的业务逻辑,实现起来比较麻烦。

    async的集合控制:

    async.map(arr, function(item, callback){},callback(err, results){});async.mapSeries

     1 app.get('/testMap',function(req, res){
     2         var arr = [0,1,2,3,4,5,6];
     3         async.mapSeries(arr,function(item, callback){
     4             (function(){
     5                 callback(null, item+1);
     6             }());
     7         },function(err, results){
     8             console.log(results);//[1,2,3,4,5,6,7];
     9         });
    10     });

    results.length与arr.length值相等;

    对数组arr中的每个item,执行某个异步函数function,得到结果。所有的结果将汇总到最终的callback里;

    async的流程控制:

    async.series(tasks,callback);多个函数依次执行,之间没有数据交换

     1 app.get('/testSeries',function(req, res){
     2         async.series([
     3         function(callback){
     4             callback(null,'function1');
     5         },function(callback){
     6             callback(null, 'function2')
     7         },function(callback){
     8             callback(null, 'function3');
     9         }],function(err, results){
    10             console.log(results);//['function1','function2','function3'];
    11         });
    12     });

    tasks: functionList;

    callback: function(err, result){}

    串行执行,一个函数数组中的每个函数执行完成之后,才执行下一个函数,callback(err,results);err返回错误信息,results为多个函数的返回的结果集;

    如果任何一个函数向它的回调函数中传了一个error,则后面的函数都不会被执行,并且将会立刻会将该error以及已经执行了的函数的结果,传给series中最后那个callback

    async.parallel(tasks,callback);多个函数并行执行;

     1 app.get('/testParallel',function(req, res){
     2     async.parallel([
     3      function(callback){
     4          callback(null,'function1');
     5     },function(callback){
     6          callback(null, 'function2')
     7      },function(callback){
     8           callback(null, 'function3');
     9     }],function(err, results){
    10           console.log(results);//['function1','function2','function3'];
    11     });
    12 }); 

    tasks: functionList;

    callback:function(err, results){}

    tasks.length与results.length值相等

    并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行.传给最终callback数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序;

    如果某个函数出错,则立刻将err和已经执行完的函数的结果值传给parallel最终的callback。其它未执行完的函数的值不会传到最终数据,但要占个位置

    async.whilst(test,function,callback);可用于异步调用while

     1 app.get('/testWhilst',function(req, res){
     2         var count = 0;
     3         async.whilst(function(){
     4             if(count < 3) return true;
     5         },function(callback){
     6             (function(){
     7                 count++;
     8                 callback(null);
     9             }());
    10         },function(err){
    11             console.log(count);//3
    12         });
    13     });
  • 相关阅读:
    JavaScript 中,定义函数时用 var foo = function () {} 和 function foo() 有什么区别?
    Vue报错 [Vue warn]: Cannot find element
    一个android样本的过保护
    cve-2015-1635漏洞分析
    一个linux的样本分析
    ios透明代理抓包
    各浏览器抗uaf机制
    面试知识点总结之Nginx
    面试知识点总结之redis
    面试知识点总结之I/O流IO/BIO/NIO/AIO区别
  • 原文地址:https://www.cnblogs.com/sxshijingjing/p/4368290.html
Copyright © 2011-2022 走看看