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     });
  • 相关阅读:
    HDU 5273 区间DP
    【管理心得之八】通过现象看本质,小王和小张谁更胜任?
    【Unity 3D】学习笔记四十二:粒子特效
    linux kernel的cmdline參数解析原理分析
    adoquery.refresh和adoquery.query的区别
    Delphi中的Sender:TObject对象解析
    ADODataSet与ADOQuery的区别
    visual studio 和 sql server 的激活密钥序列号
    修改VCL源码实现自定义输入对话框
    WINFORM 多条件动态查询 通用代码的设计与实现
  • 原文地址:https://www.cnblogs.com/sxshijingjing/p/4368290.html
Copyright © 2011-2022 走看看