回调地狱以及解决回调地狱 - promise嵌套变链接 - 解决终极办法 - async 和 await

回调函数?

当一个函数被当做参数传递时,这个函数就叫做回调函数-  callback

通常使用回调函数来处理异步代码

当异步代码执行结束后,需要执行的代码就要放在回调函数中

回调地狱?

当回调函数嵌套太多,就容易产生回调地狱 - 一行比一行缩进的厉害 - 牵一发而动全身

类似于这种(代码不重要,主要看形式):

 sendAjax({
        url: 'http://localhost:8888/test/first',
        dataType: 'text',
        success: res => {
            console.log('完成---first');
            sendAjax({
                url: 'http://localhost:8888/test/second',
                success: res => {
                    console.log('完成---second');
                    sendAjax({
                        url: 'http://localhost:8888/test/third',
                        data: {
                            name: '张三',
                            age: 13,
                        },
                        success: res => {
                            console.log('完成---third');
                        }
                    })
                }
            })
        }
    })

promise语法解决回调地狱

ES6中提供的promise语法可以解决回调地狱 - 嵌套语法变成链式语法

1. new一个promise对象

var p = new Promise(function(resolve,reject){
            //在这里发送ajax就好了
            //成功 - 调用resolve
            resolve()
            //失败 - 调用reject
            reject()
        })

其中,参数有两个:

                ① resolve 成功时所调用的函数

                ② reject    失败时所调用的函数

        注意:这两个参数函数只会执行其中一个,不可能两个都执行,或都不执行

2. new出来的promise对象 p, 有两个方法: - then - catch

        ① 当调用 resolve 就会执行 then

 p.then(function()){
            console.log('成功')
        }

        ② 当调用 reject 就会执行 catch

p.catch(function()){
            console.log(失败')
        }

(链式语法)注意:

如果在 then 中 return 一个 promise对象,里面那个小的promise对象的then就可以卸载外面那个大的promise的then后面,形成链式操作

new Promise(function(resolve, reject) {
        reject(2222) //只会执行一个
        resolve(1111)

    }).then(function() {
        return new Promise()
    }).then(function() {
        return new Promise()
    }).then(function() {
        return new Promise()
    }).catch(function() {
        console.log(str);
    })

回调地狱的终极解决办法

ES7的语法: - async  - await

具体在这篇文章:

解决回调地狱终极方法 - ES7新增 - async 和 await_平平无奇的脱发小天才的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值