nodejs如何自己写流程控制?

摘要:

一、自己写流程控制,提高代码灵活性

二、使用第三方的插件,使用方便效率高

内容:

一、自己写流程控制

1、自己写顺序执行

function makeFunc(time){

    return () =>{

        setTimeout(() => {

            console.log(`${time} ms later print`);

            next();

        }, time);

    }

}

let tasks = [makeFunc(10),makeFunc(20),makeFunc(30)];

function next(err){

    if(err) throw err;

    let task = tasks.shift();

    if(task)   task();

}

next();

解释:将多层嵌套写成函数,避免代码混乱;使用任务队列,可以让看代码的人一目了然。

2、自己写并行执行。

function makeFunc(time){

    return () =>{

        setTimeout(() => {

            console.log(`${time} ms later print`);

            check();

        }, time);

    }

}

function check(){

    count++;

    if(count == tasks.length){

        console.log("ok");

        console.timeEnd("start");

    }

}

let count = 0;

console.time("start");

let tasks = [makeFunc(10),makeFunc(20),makeFunc(30)];

tasks.filter(task => task)

.forEach(task => {

    task();

})

二、如何使用第三方插件实现顺序和并行

1、顺序执行

const async = require('async');

function makeFunc(time){

    return (callback)=>{

        setTimeout(() => {

            console.log(`${time} later exec`);

            callback();

        }, time);

    }

}

async.series([

    makeFunc(10),

    makeFunc(20),

    makeFunc(30)

],function(err,result){

    if(err) console.log(err.message);

    console.log(result);

})

结果:10 later exec

test.js:6

20 later exec

test.js:6

30 later exec

test.js:6

Array(3) [undefined, undefined, undefined]

2、并行执行

const async = require('async');

function makeFunc(time){

    return (callback)=>{

        setTimeout(() => {

            console.log(`${time} later exec`);

            callback();

        }, time);

    }

}

console.time('parellel')

async.parallel([

    makeFunc(10),

    makeFunc(20),

    makeFunc(30)

],(err,result) =>{

    if(err) console.log(err.message);

    console.log(result);

    console.timeEnd('parellel');

})

结果:

10 later exec

test.js:6

20 later exec

test.js:6

30 later exec

test.js:6

Array(3) [undefined, undefined, undefined]

test.js:18

parellel: 43.01100015640259ms

test.js:19

parellel: 43.283ms

你可能感兴趣的:(nodejs如何自己写流程控制?)