美文网首页ES6
es6--异步函数,async和await

es6--异步函数,async和await

作者: 花拾superzay | 来源:发表于2020-01-19 17:30 被阅读0次

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(); 

相关文章

  • ES8(一) —— async&await

    目录 async和普通函数的区别 await async/await处理多回调异步 async和await必须配合...

  • async和await

    浅谈Async/Await用 async/await 来处理异步 async和await async:声明一个异步...

  • es6--异步函数,async和await

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

  • dart(五)--异步、生成器

    异步 async,await 可以使同步代码异步执行。只有在async的函数里可以使用await。该函数执行到aw...

  • async-await

    1 async-await 1 异步函数 async function async关键字用于声明一个异步函数: a...

  • [Flutter] 异步操作和 HTTP 请求

    async 和 await Dart 语言支持函数进行异步操作的处理,使用 async 和 await。第一步将函...

  • async await 异步的简单用法

    async 是声明一个异步函数,如 async ()=>{} await 是等待一个异步方法执行,await 执行...

  • Async/Await替代Promise的6个理由

    Async/Await简介 async/await是写异步代码的新方式,以前的方法有回调函数和Promise。 a...

  • Async/Await简介与用法

    简介 async/await是写异步代码的新方式,以前的方法有回调函数和Promise。 async/await是...

  • Dart中的异步支持

    文章参考:《Flutter实战》 使用async和await关键字编写异步程序async :用来表示函数是异步的,...

网友评论

    本文标题:es6--异步函数,async和await

    本文链接:https://www.haomeiwen.com/subject/fmorzctx.html