回调地狱,使用promise,async await优化回调地狱

回调地狱:

 <script>
        // 特点:1. 发多次ajax请求  2. 后一次请求要依赖上一次请求的结果
        // 目标: 获取所有省市区数据, 随便获取
        // 1. 获取所有省份列表
        axios.get('http://ajax-api.itheima.net/api/province').then(res => {
            // 2. 获取某个省, 对应的城市列表
            let pname = res.data.data[5];
            axios.get(`http://ajax-api.itheima.net/api/city?pname=${pname}`).then(res => {
                // 3. 获取某个市, 对应的地区列表
                let cname = res.data.data[0]
                axios.get(`http://ajax-api.itheima.net/api/area?pname=${pname}&cname=${cname}`).then(res => {
                    console.log(res);
                })
            })
        })
    </script>

promise解决回调地狱:

<script>
        let pname = ''
        axios.get('http://ajax-api.itheima.net/api/province').then(res => {
            pname = res.data.data[5]
            return axios.get(`http://ajax-api.itheima.net/api/city?pname=${pname}`)
        }).then(res => {
            let cname = res.data.data[0]
            return axios.get(`http://ajax-api.itheima.net/api/area?pname=${pname}&cname=${cname}`)
        }).then(res => {
           return res.data.data
        }).then(area => {
            console.log(area);
        }).catch(err => {
            console.log(err,'这报错');
        })  //比回调地狱更容易捕获错误
    </script>

async await优化回调地狱:

 <script>
        axios.defaults.baseURL = 'http://ajax-api.itheima.net'
        // 目标: 使用Promise的链式调用解决问题
        // 前提: axios函数在原地返回的就是一个Promise对象
        async function f() {
            const provinces = await axios.get('/api/province')
            const pname = provinces.data.data[5]
            const citys = await axios.get(`/api/city?pname=${pname}`)
            const cname = citys.data.data[0]
            const areas = await axios.get(`/api/area?pname=${pname}&cname=${cname}`)
            return areas.data.data
        }
        async function fn() {
            const p = await f()
            console.log(p);
        }
 </script>

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值