• Node.js 实战 第2章 Node 编程基础 2.11 何时使用串行流程控制


    Node.js 实战

    第2章 Node 编程基础

    2.11 何时使用串行流程控制

    可以使用回调让几个异步任务按顺序执行,但如果任务很多、必须组织一下,否则过多的回调嵌套会把代码搞得很乱。

    下面这段代码就是用回调让任务顺序执行的。

    这个例子用setTimeout模拟需要花时间执行的任务:第一个任务用一秒,第二个用半秒,最后一个用十分之一秒。

    setTimeout只是一个人工模拟,在真正的代码中可能是读取文件、发起HTTP请求等。这段代码虽然不长,但它算是比较乱的了,并且也没有程序化添加另一个任务的简单办法。

    setTimeout(() => {
        console.log('我第一个执行');
        setTimeout(() => {
            console.log('我接着执行');
            setTimeout(() => {
                console.log('我最后执行');
            },100);
        },500);
    },1000);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    此外,你也可以用Async这样的流程控制工具执行这些任务。

    Async用起来简单直接,并且它的代码量很小(经过缩小化和压缩后只有837个字节)。下面这个命令是用来安装 Async的:

    npm install async
    
    • 1

    在这里插入图片描述

    下面的代码用串行化流程控制工具重新编写了前面那段代码。

    【用社区贡献的工具实现串行化控制】

    const async = require('async');
    async.series([
        callback => {
            setTimeout(() => {
                console.log('我第一个执行');
                callback();
            }, 1000);
        },
        callback => {
            setTimeout(() => {
                console.log('我接着执行');
                callback();
            }, 500);
        },
        callback => {
            setTimeout(() => {
                console.log('我最后执行');
                callback();
            },100);
        }
    ]);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    尽管这种用流程控制实现的版本代码更多,但通常可读性和可维护性更强。你一般也不会一直用流程控制,但当碰到想要躲开回调嵌套的情况时,它就会是改善代码可读性的好工具。

  • 相关阅读:
    v-model实现父子互传数据
    goland fold and unfold code fragment
    机器学习笔记(吴恩达老师)
    Arduino从零开始(2)——控制舵机与步进电机
    华清远见11.3
    JVM内存和垃圾回收-13.垃圾回收算法
    剑指 Offer 31. 栈的压入、弹出序列
    谈一谈工作中的前后端功能开发范围
    区块链安全,哈希函数暴露的攻击向量与对策
    从零开始配置 vim(10)——快捷键配置
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127762794