zoukankan      html  css  js  c++  java
  • async异步流程控制

    http://cnodejs.org/topic/54acfbb5ce87bace2444cbfb

    先安装:
    G:www odejsonemodels>npm install async --save-dev

    1.串行无关联:async.series(tasks,callback);
    多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行
    //匿名函数前必须有键名(one:,two:)
    async.series({
    one: function(callback){
    callback(null, 1);
    },
    two: function(callback){
    callback(null, 2);
    }
    },function(err, results) {
    console.log(results);
    });
    2.并行无关联:async.parallel(tasks,callback);
    多个函数并行执行,最后汇总结果,如果某一个流程出错就退出
    async.parallel({
    one: function(callback){
    callback(null, 1);
    },
    two: function(callback){
    callback(null, 2);
    }
    },function(err, results) {
    console.log(results);
    });
    3.串行有关联:waterfall
    每一步执行时需要由上一步执行的结果当做参数.所以每一步必须串行等待
    async.waterfall([
    function (done) {

    done(null, 'one');
    },
    function (onearg, done) {

    done(null, onearg + '| two');
    },
    function (twoarg, done) {

    done(null, twoarg + '| three');
    },
    function (threearg, done) {

    done(null, threearg + '| four');
    }
    ], function (error, result) {
    console.log(result);
    console.timeEnd('waterfall');
    })
    4.parallelLimit(tasks, limit, [callback])

    parallelLimit函数和parallel类似,但是它多了一个参数limit。
    limit参数限制任务只能同时并发一定数量,而不是无限制并发,

    async.parallelLimit([
    function(callback){
    callback(null, 'one');
    },
    function(callback){
    callback(null, 'two');
    }
    ],
    2, //只允许同时有两个函数并行
    function(err, results){
    console.log(results);
    });


    //----------------另一种方式是用Promise
    http://www.jdon.com/idea/nodejs/promise.html

  • 相关阅读:
    rabbitmq发送消息的两种格式:发送json数据和直接发送对象以及对json与对象之间的相互转换
    rabbitmq 的hello world程序
    rabbitmq用户管理、角色、权限管理以及UI管理界面的使用
    redis设置密码以及安装到服务
    mybatis- generator自动生成代码
    COGS 有标号的二分图计数系列
    Codeforces183D T-shirt
    bzoj3473 字符串
    51Nod1782 圣诞树
    51Nod1601 完全图的最小生成树计数
  • 原文地址:https://www.cnblogs.com/yu-hailong/p/7439888.html
Copyright © 2011-2022 走看看