async/await是由ES7提供的generator+promise的语法糖,模拟同步的效果,可以实现串行。
    async是一个修饰符,控制函数返回promise实例
    函数内部执行报错,则返回失败的实例,值是失败的原因
    自己返回一个promise实例,以自己返回的为主
    如果函数内部做了异常捕获,还是成功

    1. async function p(){
    2. await 1 // 没有写return代表成功后返回undefined,等价于 return Promise.resolve(1).then(() => undefined)
    3. }
    4. async function fn(){
    5. return 1 // 等价于 return Promise.resolve(1)
    6. }
    7. // 异常捕获,还是返回成功
    8. async function func(){
    9. try{
    10. return a
    11. }catch(e){}
    12. return 10
    13. }

    关于await执行

    1. function api(interval) {
    2. return new Promise((resolve, reject) => {
    3. console.log('请求执行')
    4. setTimeout(() => {
    5. resolve(interval);
    6. }, interval);
    7. })
    8. }
    9. // await后面应该放置一个promise实例「我们书写的不是,浏览器也会把其变为promise实例」,await中断函数体中,其下面的代码执行「await表达式会暂停整个async函数的执行进程并出让其控制权」;只有等待await后面的promise实例是成功态之后,后面的代码才达到可执行条件,才会把之前暂停的代码继续执行,如果后面的promise实例是失败的,则下面的代码就不在执行了。
    10. // + await是异步的微任务
    11. // + 函数体中遇到await,后面代码该咋地咋地,但是下面的代码会暂停执行「把他们当做一个任务,放置在EventQueue的微任务队列中」
    12. async function fn(){
    13. let res1 = await api(1000)
    14. console.log(res1)
    15. let res2 = await api(2000)
    16. console.log(res2)
    17. }
    18. fn() // 请求执行 1000 请求执行 2000