JS中的回调地狱以及promise对象解决回调地狱

本文通过红绿灯示例介绍了JavaScript中回调地狱的问题,并演示了如何使用Promise对象改善代码结构,提高可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用JavaScript时,为了实现某些逻辑会用到函数嵌套,但是嵌套过多会形成一个回调地狱,影响对代码的理解以及可读性。

以红绿灯为例:

setTimeout(function(){
    console.log('红灯')
	setTimeout(function(){
        console.log('绿灯')
        setTimeout(function(){
            console.log('黄灯')
        },2000)
    },2000)
},2000)

解决回调地狱的方法有很多,如promise对象,采用链式的then通过异步操作实现按顺序从上至下进行。上一个then里的回调函数返回一个promise对象,下一个then的回调函数会等上一个then里的函数返回的promise对象状态发生变化,才会被调用。

function light(t,change){
    return new Promise((res)=>{
        setTimeout(()=>{
            res(change)
        },t)
    })
}

;(function aa(){    //用闭包形成一个循环
    light(3000,'红灯').then((res)=>{
        console.log(res)
        return light(3000,'绿灯')    //执行完成后返回下一个promise对象
    }).then((res)=>{
        console.log(res)
         return light(3000,'黄灯')
    }).then((res)=>{
         console.log(res)
         aa()    //调用aa(),形成循环
    })
})();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值