Node.js学习笔记 02 Implementing flow control

页面导航:首页 > 网络编程 > JavaScript > Node.js学习笔记 02 Implementing flow control

Node.js学习笔记 02 Implementing flow control

来源: 作者: 时间:2016-01-22 08:40 【

和其它语言一样,Node js 在代码编写时,如何组织代码,如何写出clean code都是不可避免的难点。 同时,由于Node js的天然特性(异步,事件驱动),良好的代码组织就更为重要。 所谓的
和其它语言一样,Node.js 在代码编写时,如何组织代码,如何写出clean code都是不可避免的难点。
 
     同时,由于Node.js的天然特性(异步,事件驱动),良好的代码组织就更为重要。
 
     所谓的flow control指的是序列化的执行一个个node.js task的代码组织手段。
 
     与其它语言一样,任务流可以被组织成两种(串行,并行)
 
     
 
      
 
How to flow control?
    一种方式是使用node.js 社区提供的各类第三方模块(),另一种方式就是我们自己编写相关代码。为了工程开发的效率,用第三方库当然是更好的选择,但是为了更好的了解node.js的异步原理,我们可是自己试着实现两种流控制。
 
 
 
A simple demo of serial flow control
    以下的代码实现了每隔一秒输出不同文字的功能。
 
setTimeout(function () {
    console.log("First");
    setTimeout(function () {
        console.log("Sencond");
        setTimeout(function () {
            console.log("Third");
        }, 1000);
    }, 1000);
}, 1000);
  

    如果用第三方库来实现串行流控制,代码会是这样的:

var flow = require('nimble');

flow.series([
    function (callback) {
        setTimeout(function () {
            console.log("First");
            callback();
        }, 1000)
    },
    function (callback) {
        setTimeout(function () {
            console.log("Second");
            callback();
        }, 1000)
    },
    function (callback) {
        setTimeout(function () {
            console.log("Third");
            callback();
        }, 1000)
    }
]);

 

    More code but more maintainable。特别是在串行调用链极长的时候,使用流控制的优势就非常明显了。
 
 
 
    那我们自己要如何实现相关代码呢?下面就是例子:
 
var tasks = [
    function (callback) {
        setTimeout(function () {
            console.log("First");
            next();
        }, 1000)
    },
    function (callback) {
        setTimeout(function () {
            console.log("Second");
            next();
        }, 1000)
    },
    function (callback) {
        setTimeout(function () {
            console.log("Third");
            next();
        }, 1000)
    }
];

function next(){
    var currentTask = tasks.shift();
    if (currentTask) {
        currentTask();
    }
}

next();

 

     OK,很简单吧,我们再来看并行。
 
Parallel flow control
    以下代码假设我们跑了10个并行任务:
 
var taskCounter = 0;
var taskSum = 10;

function isTaskCompleted(){
    if (++taskCounter == taskSum) {
        console.log('All job done');       
    }
}

function Job(){
    //Lots of code here
    isTaskCompleted();
}

for(var i = 0; i < 10; i++)
    Job();


    使用nimble来解决同样的问题:

var flow = require('nimble');

flow.parallel([
    Job(),
    Job(),
    Job(),
    Job(),
    Job(),
    Job(),
    Job()
]);
  

 

 
 
 
Summary
    本文是对flow control做的很精简的总结,信息量不大,大家多多包涵。
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<