Node.js中流程控制

Node.js中的流程控制可以使用async,在使用之前需要先安装,使用npm安装

npm install async --g

下面主要介绍4种流程控制的方式:

1、串行无关联:async.series(tasks,callback)

多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行;

以下是标准写法:

async.series({
    one: function(callback){
        callback(null, 1);
    },
    two: function(callback){
        callback(null, 2);
    }
},function(err, results) {
    console.log(results);
});

为了测试,我们使用交叉执行的方式:

var async = require(‘async‘);
function exec(){
    async.series({
        one: function(done){
            ii=0;
            setInterval(function(){
                console.log(‘aaa=‘+new Date());
                ii++;
                if(ii==3){
                    clearInterval(this);
                    done(null,{one:"one"});
                }
            },1000);
        },
        two: function(done){
            jj=0;
            setInterval(function(){
                console.log(‘bbb=‘+new Date());
                jj++;
                if(jj>3){
                    clearInterval(this);
                    done(null,{two:"two"});
                }
            },1000);
        }
    },
        function(err,rs) {
            console.log(err);
            console.log(rs);
        });
}
exec();

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);
});

原文地址:https://www.cnblogs.com/kefeiGame/p/9167584.html

时间: 2024-10-11 10:21:44

Node.js中流程控制的相关文章

Node.js异步流程控制

原文地址:Node.js异步流程控制 原文地址:https://www.cnblogs.com/edward852/p/8580917.html

在node.js中使用COOKIE

node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 1 var today = new Date(); 2 var time = today.getTime() + 60*1000; 3 var time2 = new Date(time); 4 var timeObj = time2.toGMTString(); 5 response.writeHead({ 6 'Set-Cookie':'myC

使用 Raspberry Pi 上的传感器在 Node.js 中创建一个 IoT Bluemix 应用程序

先决条件 一个IBM Bluemix 帐号,一个 Raspberry Pi 2 或 3,一个 PIR 运动传感器 适用于本文的 Github 存储库 如果您是一位精明的 Bluemix 开发人员,您可能只想看看如何在 node.js 中与 IoT 建立连接,或者只想了解如何从此 github 存储库中拉取我的代码. git clone https://github.com/nicolefinnie/iot-nodejs-tutorial 以下是实现与 IBM IoT 平台连接在一起的 4 个 R

Node.js中的不安全跳转如何防御详解

Node.js中的不安全跳转如何防御详解 导语: 早年在浏览器大战期间,有远见的Chrome认为要运行现代Web应用,浏览器必须有一个性能非常强劲的Java引擎,于是Google自己开发了一个高性能的开源的Java引擎,名字叫V8.在2009年,Ryan正式推出了基于Java语言和V8引擎的开源Web服务器项目,命名为Node.js. 对于任何web开发人员来说,不安全或未经验证的重定向都是重要的安全考虑因素.Express为重定向提供了本地支持,使它们易于实现和使用.Express是一种保持最

在Node.js中使用RabbitMQ系列二 任务队列

在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心解决的问题是避免立即处理那些耗时的任务,也就是避免请求-响应的这种同步模式.取而代之的是我们通过调度算法,让这些耗时的任务之后再执行,也就是采用异步的模式.我们需要将一条消息封装成一个任务,并且将它添加到任务队列里面.后台会运行多个工作进程(worker process),通过调度算法,将队列里的任

从头开始-04.C语言中流程控制

分支结构: if语句:当条表达式满足的时候就执行if后面大括号中语句 三种格式: if,if else , if else if else 特点:1.只有一个代码块会被执行 2.若有else那么必有一个代码会被执行 3.一个if语句中只能以if开头,最多只能有一个else,可以有任意个else if switch(表达式){ case 常量: ... break; case 常量1: ... break; default: ... break; } : 使用场景:当一个变量只有几个固定的取值的时

Node.js权威指南 (10) - Node.js中的错误处理与断言处理

10.1 使用domain模块处理错误 / 272 10.1.1 domain模块概述 / 272 10.1.2 创建并使用Domain对象 / 274 10.1.3 隐式绑定与显式绑定 / 276 10.1.4 绑定回调函数与拦截回调函数 / 279 10.1.5 domain堆栈的弹出与推入 / 280 10.1.6 Domain对象的销毁 / 28610.2 Node.js中的断言处理 / 286 10.2.1 equal方法与notEqual方法 / 287 10.2.2 strictE

node.js中的交互式运行环境-REPL

<Node.js权威指南>第2章Node.js中的交互式运行环境--REPL 开发者可以在该环境中很方便地输入各种JavaScript表达式并观察表达式的运行结果. 在学习Node.js框架的过程中,通过该运行环境的使用,我们可以很方便地了解Node.js中定义的各种对象所拥有的各种属性及方法.本节为大家介绍在REPL运行环境中操作变量 2.2 在REPL运行环境中操作变量 在REPL运行环境中,可以使用var关键字来定义一个变量并为其赋值,但是在输入了对其赋值进行的表达式后,该表达式的执行结

node.js中的exports和module.exports

不同的编程语言都有各自的代码组织和复用的方式,如.net.php中的命名空间,python中的import,ruby中的module等,来避免命名空间污染.一直都没搞清楚node中的exports和module.exports的区别,借此搞清楚node的代码模块复用方式. 首先怎么创建node中的modules. 可以直接创建一个文件作为module,如下module.js function writeLine(){ console.log("module.js"); } export