地狱回调,promise链式调用,async/await

同步代码:逐行执行,原地等待结果,才继续向下执行

异步代码:调用后耗时,不阻塞代码执行,将来完成后触发回调函数(setTimeout,setInterval,事件,ajax)

异步代码依靠回调函数接受

回调函数地狱:在回调函数中嵌套函数回调,一直嵌套下去就形成了地狱回调

缺点:可读性差,异常无法捕获,耦合性严重

地狱回调

axios({
  url: 'https://hmajax.itheima.net/api/province'
}).then(result => {
  // 获取省份信息并显示在页面
  provinceList.value = result.data.list
  province.value = provinceList.value[0]
  axios({
    // 根据省份信息获取城市信息并显示在页面
    url: 'https://hmajax.itheima.net/api/city'
    , params: { pname: province.value }
  }).then(result => {
    cityList.value = result.data.list
    city.value = cityList.value[0]
    axios({
      // 根据省份和城市信息获取地区信息并显示在页面
      url: 'https://hmajax.itheima.net/api/area'
      , params: { pname: province.value, cname: city.value }
    }).then(result => {
      areaList.value = result.data.list
      area.value = areaList.value[0]
    }).catch(error => {

    })
  }).catch(error => {

  })
}).catch(error => {

})

promise链式调用

解决了结构嵌套问题,返回一个promise对象供下一级使用

axios({
  url: 'https://hmajax.itheima.net/api/province'
}).then(result => {
  // 获取省份信息并显示在页面
  provinceList.value = result.data.list
  province.value = provinceList.value[0]
  return axios({
    // 根据省份信息获取城市信息并显示在页面
    url: 'https://hmajax.itheima.net/api/city'
    , params: { pname: province.value }
  })
}).then(result => {
  cityList.value = result.data.list
  city.value = cityList.value[0]
  return axios({
    // 根据省份和城市信息获取地区信息并显示在页面
    url: 'https://hmajax.itheima.net/api/area'
    , params: { pname: province.value, cname: city.value }
  })
}).then(result => {
  areaList.value = result.data.list
  area.value = areaList.value[0]
})

async/await

用async和await解决地狱回调

async写在函数前面,表示此函数为异步函数,不会阻塞代码。函数返回是一个promise对象

await写在异步代码前,阻塞代码块,等待当前异步执行结束后放行

const getData = async () => {
  const result1 = await axios({
    url: 'https://hmajax.itheima.net/api/province'
  })
  provinceList.value = result1.data.list
  province.value = provinceList.value[0]

  const result2 = await axios({
    // 根据省份信息获取城市信息并显示在页面
    url: 'https://hmajax.itheima.net/api/city'
    , params: { pname: province.value }
  })
  cityList.value = result2.data.list
  city.value = cityList.value[0]

  const result3 = await axios({
    // 根据省份和城市信息获取地区信息并显示在页面
    url: 'https://hmajax.itheima.net/api/area'
    , params: { pname: province.value, cname: city.value }
  })
  areaList.value = result3.data.list
  area.value = areaList.value[0]
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值