什么是地狱回调?
回调:运行某个函数实现某个功能的时候,传入一个函数作为参数,当发生某件事情之后,会执行函数参数
回调地狱:某个异步操作需要等待之前的异步操作完成以后,无论回调是事件还是其他函数,都会陷入不断的回调
地狱回调举例:
<button id="btn1">btn1</button>
<button id="btn2">btn2</button>
<button id="btn3">btn3</button>
<script>
const btn1 = document.getElementById("btn1")
const btn2 = document.getElementById("btn2")
const btn3 = document.getElementById("btn3")
btn1.addEventListener("click",function(){
btn2.addEventListener("click",function(){
btn3.addEventListener("click",function(){
console.log("hello")
})
})
})
</script>
解决地狱回调的例子:
<script>
function LOL(hoer) {
return new Promise((resolve,reject) => {
console.log(`我想选择${hoer}`);
setTimeout(() => {
if(Math.random() < 0.4) {
console.log(`${hoer}是MVP`);
resolve(true)
}else {
console.log(`${hoer}不是MVP`)
resolve(false)
}
},2000)
})
}
const prom = [] //日志数组
let hasAgree = false
for(let i = 1 ; i < 10;i++){
const por = LOL(`英雄${i}`).then(result => {
if(result) {
if(hasAgree) {
console.log(`下次再玩${i}`);
}else {
hasAgree = true
console.log(`下次再玩这个`)
}
}
return result
})
prom.push(por)
}
console.log(prom);
Promise.all(prom).then(result => {
console.log("日志分析",result);
})
</script>