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

在用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(),形成循环
    })
})();

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promise 是一种用于处理异步操作的对象,它可以有效地解决回调地狱问题。回调地狱是指当多个异步操作依赖于前一个操作的结果时,嵌回调函数会导致代码难以理解和维护。 通过使用 Promise,我们可以将异步操作的结果链接在一起,形成一个链式调用。Promise 提供了两个特殊的方法:`then` 和 `catch`。 使用 `then` 方法,我们可以在前一个操作完成后执行下一个操作,并将结果传递给下一个操作。这样可以避免嵌回调函数。 使用 `catch` 方法,我们可以捕捉链式调用出现的任何错误,并进行相应的处理。 下面是一个使用 Promise 解决回调地狱问题的示例代码: ```javascript function asyncOperation1() { return new Promise((resolve, reject) => { // 异步操作1 // 在操作完成后调用 resolve 或 reject }); } function asyncOperation2() { return new Promise((resolve, reject) => { // 异步操作2 // 在操作完成后调用 resolve 或 reject }); } function asyncOperation3() { return new Promise((resolve, reject) => { // 异步操作3 // 在操作完成后调用 resolve 或 reject }); } asyncOperation1() .then(result1 => { // 处理异步操作1的结果 return asyncOperation2(); }) .then(result2 => { // 处理异步操作2的结果 return asyncOperation3(); }) .then(result3 => { // 处理异步操作3的结果 }) .catch(error => { // 处理错误 }); ``` 在上述示例,每个异步操作返回一个 Promise 对象,并在操作完成后调用 resolve 或 reject。通过使用 `then` 方法,我们将每个操作链接在一起,形成一个链式调用。如果任何操作失败,会自动跳转到 `catch` 方法进行错误处理。 使用 Promise 可以让异步代码更易于理解和维护,避免回调地狱问题的出现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值