JavaScript:async函数和await解决回调

介绍

用async和await关键字编写javascript异步代码更加简洁,而且彻底解决回调地狱的问题。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await

  • async 函数声明创建一个绑定到给定名称的新异步函数。函数体内允许使用 await 关键字,这使得我们可以更简洁地编写基于promise 的异步代码,并且避免了显式地配置 promise 链的需要。
  • await 操作符用于等待一个 Promise 兑现并获取它兑现之后的值。它只能在异步函数或者模块顶层中使用。
  • 在async函数内,使用await关键字取代then函数,等待获取Promise对象成功状态的结果值。
  • await必须用在async修饰的函数内(await会阻止"异步函数内"代码继续执行,原地等待结果)。

示例

下面示例中,用async + await 关键字,简化异步调用,实现获取省份数据、城市数据、地区数据:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>async函数和await_解决回调函数地狱</title>
</head>

<body>
  <form>
    <span>省份:</span>
    <select>
      <option class="province"></option>
    </select>
    <span>城市:</span>
    <select>
      <option class="city"></option>
    </select>
    <span>地区:</span>
    <select>
      <option class="area"></option>
    </select>
  </form>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目标:掌握async和await语法,解决回调函数地狱
    */
    //  1. 定义async修饰的函数
    async function getData() {
      // 2. await等待Promise成功的结果
      // 获取省份数据
      const pObj = await axios({ url: 'https://hmajax.itheima.net/api/province' })
      console.log('省份请求返回:')
      console.log(pObj)
      const pname = pObj.data.list[0]

      // 根据省份获取城市
      const cObj = await axios({ url: 'https://hmajax.itheima.net/api/city', params: { pname } })
      console.log('返回省份下的城市数据:')
      console.log(cObj)
      const cname = cObj.data.list[0]

      // 根据省份、城市获取地区
      const aObj = await axios({ url: 'https://hmajax.itheima.net/api/area', params: { pname, cname } })
      console.log('根据省份、城市获取地区数据的返回:')
      console.log(aObj)
      const areaName = aObj.data.list[0]

      document.querySelector('.province').innerHTML = pname
      document.querySelector('.city').innerHTML = cname
      document.querySelector('.area').innerHTML = areaName
    }
    getData()
  </script>
</body>

</html>

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值