未进化的程序猿
人生最苦痛的是梦醒了无路可走。做梦的人是幸福的;倘没有看出可走的路,最要紧的是不要去惊醒他。鲁迅

一、什么是回调地狱:

人们普遍以javaScript的执行顺序来编写代码,在执行异步代码时,无论以什么顺序简单的执行代码,通常情况会变成许多层级的回调函数堆积

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!--通过ajax请求Id,再根据id请求用户名,再根据用户名去获取用户的邮箱-->
    <script src="./jquery-3.3.1.min.js"></script>
</head>
<body>
    <script>
        //发送ajax请求
        $.ajax({
            type:'GET',
            url:'./data1.json',
            success:(res)=>{
                const {id} = res;
                console.log(id); //1
                $.ajax({
                    type:'GET',
                    url:'./data2.json',
                    data:{id}, //相当于 id:id
                    success:res1=>{
                        const {name} = res1
                        console.log(name);//张三
                        //再根据username获取email
                        $.ajax({
                            type:'GET',
                            url:'./data3.json',
                            data:{name},
                            success:res3=>{
                                const { email } = res3;
                                console.log(email);//486566947@qq.com
                            }
                        });
                    }
                });
            }
        });
    </script>
</body>
</html>

 

二、解决方法:

1.放弃使用匿名函数,给所有的函数都命名,以名字的方式传递回调函数;

2.代码简洁;

3.模块儿化,将重复代码写入一个函数体内;

4.Promise

posted on 2020-12-06 17:18  甘茂旺  阅读(79)  评论(0编辑  收藏  举报