浅谈async await用法

举报
vike 发表于 2021/11/26 10:20:47 2021/11/26
【摘要】 前言上几篇文章更完了promise 今天一起来看看async await异步操作的使用与理解 async await理解async和await用更简洁的方式写出基于promise的异步行为asyncawait函数的返回值为promise对象右侧的表达式一般为promise对象或其他值promise的结果有async返回值决定如果是promise对象 返回成功值否则将表达式的值返回async...

前言

  • 上几篇文章更完了promise 今天一起来看看async await异步操作的使用与理解

async await理解

  • async和await用更简洁的方式写出基于promise的异步行为
async await
函数的返回值为promise对象 右侧的表达式一般为promise对象或其他值
promise的结果有async返回值决定 如果是promise对象 返回成功值否则将表达式的值返回
async函数中可以没有await await必须写在async函数中
* 如果await的promise失败就会抛出异常 需要通过try catch捕获异常
async中不存在await则同步执行 存在await才异步执行
  • async 函数成功 使用示例
    • 创建一个成功的函数 返回为1的结果
    • 执行函数并打印 返回值为promise对象
        const fn = async () => {
            return 1
        }
        /*
        fn 函数等价于
        const fn = async () => {
            return Promise.resolve(1)
        }
        */ 
        
        const result = fn()
        console.log(result)

1632986361(1).png

  • async 函数失败 使用示例
    • 创建一个失败函数 向浏览器抛出错误为3
    • 获取变量为result的promise对象,用链式调用获取错误
        const fn = async () => {
            throw 3
        }
         /*
        fn 函数等价于
        const fn = async () => {
            return Promise.reject(3)
        }
        */ 
        const result = fn()
        result.then(
            value => { console.log('onResolved', value) },
            reason => { console.log('onRjected', reason) }
        )

1632986959(1).png

  • await 右侧表达式为成功promise示例
    • fn函数返回了成功promise
    • 使用await可以避免使用then直接获取成功值
        const fn = () => {
            return Promise.resolve(1)
        }

        const fn2 = async () => {
            let value = await fn()
            console.log(value)
        }

        fn2()
  • awiat 右侧为失败promise示例
    • fn函数返回了失败的promise
    • awiat获取不到失败结果 需要用try catch语法获取
        const fn = () => {
            return Promise.reject(1)
        }
        const fn2 = async () => {
            try {
                let value = await fn()
            } catch (error) {
                console.log(error)
            }
        }

        fn2()
  • await 右侧不是promise示例
    • 得到的结果就是返回的值
        const fn = () => {
            return 6
        }
        const fn2 = async () => {
            let value = await fn()
            console.log(value)
        }
        fn2()

1632988826(1).png

使用进阶

  • 以下这段代码value值为6
  • 注意:fn()此时的结果为promise对象 await直接获取成功结果
  • async函数返回的一定是一个promise对象
        const fn = async () => {
            return 6
        }
        const fn2 = async () => {
            let value = await fn()
            console.log(value)
        }
        fn2()

总结

  • async与await一般搭配使用 async函数里可以没有await
  • 今日份小知识get~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。