• node 中的 异步地狱回调


    今天分享下node中的地狱回调(callback hell)

    先看个例子

    const fs = require("fs");
    
    fs.readFile("./a.txt", "utf-8", (err, data) => {
         if (err) throw err;
         console.log(data)
    })
    
    fs.readFile("./b.txt", "utf-8", (err, data) => {
         if (err) throw err;
         console.log(data)
    })
    
    fs.readFile("./c.txt", "utf-8", (err, data) => {
         if (err) throw err;
         console.log(data)
    })
    
    fs.readFile("./d.txt", "utf-8", (err, data) => {
         if (err) throw err;
         console.log(data)
    })

    我们分别打开a.txt,b.txt,c.txt,d.txt

    a.txt  文件中写入aaaaa

    b.txt 文件中写入bbbbb

    c.txt 文件中写入ccccc

    d.txt文件中写入ddddd

    因为我们上篇博文中讲解了 异步的执行顺序是不确定的 所以执行出来可能是

    aaaaa

    ccccc

    bbbbb

    ddddd

    也可能是

    aaaaa

    bbbbb

    ddddd

    ccccc

    所以当我们想要读取文件按照顺序执行,可以用嵌套的方法如

    const fs = require("fs");
    
    fs.readFile("./a.txt", "utf-8", (err, data) => {
        if (err) throw err;
        console.log(data);
        fs.readFile("./b.txt", "utf-8", (err, data) => {
            if (err) throw err;
            console.log(data);
        })
    })

    这样执行顺序就是  aaaaaa bbbbbb 我们分别把读取c文件和d文件都嵌套到里面 

    const fs = require("fs");
    
    fs.readFile("./a.txt", "utf-8", (err, data) => {
        if (err) throw err;
        console.log(data);
        fs.readFile("./b.txt", "utf-8", (err, data) => {
            if (err) throw err;
            console.log(data);
            fs.readFile("./c.txt", "utf-8", (err, data) => {
                if (err) throw err;
                console.log(data);
                fs.readFile("./d.txt", "utf-8", (err, data) => {
                    if (err) throw err;
                    console.log(data);
                })
            })
        })
    })

    这样我们执行完代码就会按照顺序执行也就是

    aaaaaa

    bbbbbb

    cccccc

    dddddd

    我们可以回过头来观察一下目前的代码,虽然实现了按照顺序执行的目的,可是代码非常的乱,为了让大家更加直观的体验 我们在增加几个读取文件的操作

     随着读取的文件越来越多,我们发现需要嵌套的层数也越来越多,网上有一个非常出名的图片

     这就是地狱回调的案例,缺点很明显:代码嵌套越来越多,维护起来要人命,还很容易出现错误,所以我们不要写出这样的代码,下一篇会介绍如何解决地狱回调嵌套的问题

  • 相关阅读:
    Google TensorFlow 机器学习框架介绍和使用
    Linux下chkconfig命令详解转载
    wireshark----linux
    linux 开机自启转载
    linux 开机自启
    linux 开机自启脚本
    当进行make命令学习是出现error trying to exec 'cc1': execvp: No such file or directory
    centos6.4安装GCC
    安装cmake
    整型数转字符串
  • 原文地址:https://www.cnblogs.com/qjuly/p/14494382.html
Copyright © 2020-2023  润新知