【JS】黑马学习笔记_async 函数和 await

本文详细介绍了async函数和await关键字在处理基于Promise的异步操作中的应用,以及如何避免回调地狱,同时涵盖了错误捕获和try-catch块的使用。通过axios示例展示了如何在实际编程中使用这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

黑马学习笔记_async 函数和 await

async 函数是 AsyncFunction 构造函数的实例,并且其中允许使用 await 关键字

async 和 await 关键字让我们可以用一种更简洁的方式写出基于 Promise 的异步行为,而无需刻意地链式调用 promise。

讲解

  1. 概念:在 async 函数内,使用 await 关键字取代 then 函数,等待获取 Promise 对象成功状态的结果值

  2. 做法:使用 async 和 await 解决回调地狱问题

  3. 核心代码:

    /**
     * 目标:掌握async和await语法,解决回调函数地狱
     * 概念:在async函数内,使用await关键字,获取Promise对象"成功状态"结果值
     * 注意:await必须用在async修饰的函数内(await会阻止"异步函数内"代码继续执行,原地等待结果)
    */
    // 1. 定义async修饰函数
    async function getData() {
      // 2. await等待Promise对象成功的结果
      const pObj = await axios({
          url: 'http://hmajax.itheima.net/api/province'
      })
      const pname = pObj.data.list[0]
      const cObj = await axios({
          url: 'http://hmajax.itheima.net/api/city', 
          params: { 
              pname 
          }
      })
      const cname = cObj.data.list[0]
      const aObj = await axios({
          url: 'http://hmajax.itheima.net/api/area', 
          params: { 
              pname, 
              cname 
          }
      })
      const areaName = aObj.data.list[0]
    
    
      document.querySelector('.province').innerHTML = pname
      document.querySelector('.city').innerHTML = cname
      document.querySelector('.area').innerHTML = areaName
    }
    
    getData()
    

【NOTE】

axios 原地返回一个 Promise 对象。

可以使用 await 替代 then

【IMPORTANT】

Q: await 的作用是什么?

A: 替代 then 方法来提取 Promise 对象成功状态的结果

async 函数和 await _捕获错误

讲解

  1. try 和 catch 的作用:语句标记要尝试的语句块,并指定一个出现异常时抛出的响应

    try {
      // 要执行的代码
    } catch (error) {
      // error 接收的是,错误消息
      // try 里代码,如果有错误,直接进入这里执行
    }
    

    try 里有报错的代码,会立刻跳转到 catch 中

  2. 尝试把代码中 url 地址写错,运行观察 try catch 的捕获错误信息能力

    /**
     * 目标:async和await_错误捕获
    */
    async function getData() {
      // 1. try包裹可能产生错误的代码
      try {
        const pObj = await axios({ url: 'http://hmajax.itheima.net/api/province' })
        const pname = pObj.data.list[0]
        const cObj = await axios({ url: 'http://hmajax.itheima.net/api/city', params: { pname } })
        const cname = cObj.data.list[0]
        const aObj = await axios({ url: 'http://hmajax.itheima.net/api/area', params: { pname, cname } })
        const areaName = aObj.data.list[0]
    
        document.querySelector('.province').innerHTML = pname
        document.querySelector('.city').innerHTML = cname
        document.querySelector('.area').innerHTML = areaName
      } catch (error) {
        console.dir(error)
      }
    }
    
    getData()
    

【NOTE】

try 块中某行代码报错,调用catch块,接收错误信息。
如果 try 中某行代码报错后,错误位置后面剩余的代码将不会执行

【TIP】

Q: console.logconsole.dir 有什么区别?

A:

  • log语句打印的是结果,直接显示信息;
  • dir语句打印的是内容,显示对象的所有属性和方法。
    请添加图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值