• 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     });
  • 相关阅读:
    解决 未能为数据库 '数据库用户名' 中的对象 '表名' 分配空间,因为文件组 'PRIMARY' 已满
    获取一个目录下文件扩展名为txt或htm或html的文件的几种方法
    由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
    图解C#创建SqlServer MD5 加密函数
    SqlServer 日期转换 所有格式
    使用SoapHeader对WebService进行身份验证
    禁用文本框粘贴功能
    去除 以下文件中的行尾不一致,要将行尾标准化吗 的提示
    程序锁定windows系统以及调用其它系统对话框,如控制面板,重启系统
    yakuake shell
  • 原文地址:https://www.cnblogs.com/sxshijingjing/p/4368290.html
Copyright © 2020-2023  润新知