一、什么是回调地狱:
人们普遍以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