es6--异步函数,async和await

async函数也是用来解决异步编程的书写问题,比promise更简洁,它把异步代码的书写方式简化的几乎和同步代码书写方式一样。

async异步函数内部有一个await关键字(也可以称为await指令)。async函数的返回值是一个promise实例,在async函数执行时首次遇到return或者await关键字后返回。

await关键字后面跟的是一个变量(也可说是一个值,这里假设为a),如果该变量的值是一个promise对象,则中断执行保持等待,当该promise对象resolve后,继续向下执行。如果该变量的值不是promise实例,则使用Promise.resolve(a)的形式包装该变量。

很多时候我们看到await后面跟的是一个语句,等于接受语句的返回值,即先执行语句,然后await关键字等待的是语句的返回值,如果语句没有返回值则为undefined

await关键字会返回值,我们可以使用一个变量来接收。返回值就是其后跟的promise实例resolve的参数。

如果await关键字后的promise实例的reject执行了(假设有参数arg),那么async函数中断执行,同时async函数返回的promise实例的reject执行,并接收参数arg。需要注意,如果await后的promise实例reject了,而async函数返回的promise实例没有注册失败回调,浏览器会报错(实测chrome浏览器会报错)

async函数在执行中遇到return语句时会退出函数的执行。如果函数执行到最后的代码都没有遇到return语句,则系统会在最后自动加上return undefined。这时async函数返回的promise实例的resolve或者reject就会执行。如果return一个非promise实例,则执行resolve,并接收return出的值为参数。如果return一个promise实例,则变成了状态关联。

//定义异步函数h
async function h() {
    //创建一个promise实例
    let promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('ssss')
        }, 5000)
    })

    //等待promise完成
    let b = await promise; //定义变量b接收await的返回值,

    setTimeout(() => {
        console.dir(b + 1000); //打印ssss1000
    }, 5000)
}



//调用函数h
//返回值是一个promise实例
let a = h(); 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 含义 async函数是Generator函数的语法糖,它使得异步操作变得更加方便。 写成async函数,就是下面这...
    oWSQo阅读 2,050评论 0 2
  • async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 async 函数是...
    huilegezai阅读 1,336评论 0 6
  • async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 async函数对 ...
    Xyaleo阅读 1,184评论 0 4
  • 简单介绍下这几个的关系为方便起见 用以下代码为例简单介绍下这几个东西的关系, async 在函数声明前使用asyn...
    _我和你一样阅读 21,524评论 1 24
  • 前面的话 ES2017标准引入了async 函数,使得异步操作变得更加方便。本文将详细介绍async函数 概述 a...
    CodeMT阅读 1,395评论 0 3

友情链接更多精彩内容