zoukankan      html  css  js  c++  java
  • 浅谈node Async异步处理模块

    最近在研究nodejs,令我感受比较深的是……熟悉js代码的地球人都知道,js的加载顺序很重要!很重要!!那么问题来了,在编写node的时候,会在后台去请求很多接口(我们公司是与java后台交接数据的),接口就会有个回调,这么多回调怎么办呢……每个回调回来的加载顺序怎么去处理是个问题……总不可能去嵌套……嵌套……这样吧,那会显的多麻烦!!这么大的一个问题怎么没有处理方法呢,那是不可能的……对吧!

    Async异步处理模块!

    以下是小sam的理解:
    安装很简单,就跟普通的安装模块一样就行了

    这样就安装成功了! 接下来就是引用了,在代码里引用模块:

    var async = require('async');

    这样引用也就ok了!在代码后面就可以轻松的用async这个对像模块了!
    查了下官方文档,这个模块的方法实在是太多了!看的眼花……
    下面我们来谈谈小sam觉得比较常用到的几个方法就好了 

    series

    1.series(tasks, [callback]) 顺序执行数组、集合内的函数,当前面一个函数执行完成就会立即执行下一个函数,如果函数触发了错误,可以在callback函数中验证,否则会一直执行完成tasks

    话多没用,代码才是亲爹

    用例:

    //tasks传的是一个数组函数
    async.series([
       function(callback) {
       // do some stuff ...
       callback(null, 'one');
    },
      function(callback) {
      // do some more stuff ...
      callback(null, 'two');
    }],
    // optional callback
    //我觉得这里很重要err是上面两个函数的错误信息,而results这个参数是一个数组对象,它们的值是上面数组函数每个callback里面的参数。
    function(err, results) {
    // results is now equal to ['one', 'two']
    });
    // an example using an object instead of an                    
    
    //下面的代码其实跟上面的差不多,只是stasks传的是对象而不是数组
    async.series({
    one: function(callback) {
        setTimeout(function() {
            callback(null, 1);
        },
        200);
    },
    two: function(callback) {
        setTimeout(function() {
            callback(null, 2);
        },
        100);
      }
    },
    function(err, results) {
    // results is now equal to: {one: 1, two: 2}
    });

     

    parallel

    2.parallel(tasks, [callback])  并行执行数组、集合内的方法,不用等到前一个函数执行完再执行下一个函数,如果函数触发了错误,可以在callback函数中验证

     async.parallel(
    [
      function(callback) {
        setTimeout(function() {
              callback(null, 'one');
            },
        200);
      },
      function(callback) {
        setTimeout(function() {
            callback(null, 'two');
        },
        100);
      }
    ],
     // optional callback
     function(err, results) {
        // the results array will equal ['one','two'] even thoug
        // the second function had a shorter             
        timeout
     }
    ); 

     

    parallelLimit

    3.parallelLimit(tasks, limit, [callback])  和2用法一样,只是多了一个任务数量限制,最多允许多少个任务在并行执行

    whilst

    4.whilst(test, fn, callback)  等同于while的用法,第一个参数为验证条件,第二个参数为执行函数,第三个参数为验证失败后回调函数,一般在做延迟动画用的比较多

     var count = 0;
     async.whilst(
      function () { return count < 5; },
      //验证成    功继续,失败进回调
      function (callback) {
          count++;
          setTimeout(callback, 1000);
      },
      function (err) {
         // 5 seconds have passed
     }
    );

     

    waterfall

    5.waterfall(tasks, [callback])  tasks依次运行,前一个函数的回调会作为后一个函数的参数,如果有任何任务通过一个错误的回调,下一个函数不执行

    async.waterfall([
      function(callback){
          callback(null, 'one', 'two');
      },
      function(arg1, arg2, callback){
       // arg1 now equals 'one' and arg2 nowequals 'two'
          callback(null, 'three');
     },
      function(arg1, callback){
         // arg1 now equals 'three'
         callback(null, 'done');
     }
     ], function (err, result) {
        // result now equals 'done'    
    });

     

    compose

    6.compose(fn1, fn2...)  按顺序加入到队列中,按顺序执行,将上一个函数的结果作为下一个函数的值

     function add1(n, callback) {
      setTimeout(function () {
          callback(null, n + 1);
      }, 10);
      }
    
     function mul3(n, callback) {
      setTimeout(function () {
          callback(null, n * 3);
     }, 10);
    }
    
    var add1mul3 = async.compose(mul3, add1);
    
     add1mul3(4, function (err, result) {
    // result now equals 15
    });

     

  • 相关阅读:
    Postman使用教程
    CAD和ArcGIS转换 矢量配准
    SAP CRM Advanced search和Simple search里Max hit表现行为的差异
    SAP CRM Product simple search的启用步骤
    如何快速定位SAP CRM订单应用(Order Application)错误消息抛出的准确位置
    如何动态修改SAP CRM WebClient UI表格栏的宽度
    如何在SAP CRM WebClient UI里创建web service并使用ABAP消费
    如何处理SAP CRM Web Service错误
    如何使用SAP CRM WebClient UI实现一个类似新浪微博的字数统计器
    如何开启SAP CRM基于WORD模板创建附件的功能
  • 原文地址:https://www.cnblogs.com/samsimi/p/6547186.html
Copyright © 2011-2022 走看看