zoukankan      html  css  js  c++  java
  • 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

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

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

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

  • 相关阅读:
    2017 五一 清北学堂 Day1模拟考试结题报告
    2973 枪毙
    2840 WIKIOI——评测
    解决magento保存产品时耗时很长的问题
    easyui-layout中的收缩层无法显示标题问题解决
    JAVA排序(一) Comparable接口
    C语言数据结构----栈与递归
    [置顶] SpecDD(混合的敏捷方法模型)主要过程概述
    Vim 实用技术,第 1 部分: 实用技巧(转)
    如何解决dns解析故障
  • 原文地址:https://www.cnblogs.com/qjuly/p/14494382.html
Copyright © 2011-2022 走看看