zoukankan      html  css  js  c++  java
  • async await promise 执行时序

     先用一个例子来说明async await promise的执行顺序

    console.log('start');
    
    async function test(){
        console.log('111');
    
        await new Promise((resolve,reject)=>{
            setTimeout(()=>{
                console.log('finish')
                resolve('haha');
            },6000)
        })
    
        console.log('start promise2')
    
        return await new Promise((resolve,reject)=>{
            setTimeout(()=>{
                console.log('finish2')
                resolve('haha2');
            },6000)
        })
    }
    
    test().then((data)=>
     console.log(data)
     )
    
    console.log('end');

    该段代码的执行结果为:

    上面的代码很好的显示了执行顺序,其实async 就是 generator 函数的语法糖,即async -->  function* (){}

    await 是generator函数里面的yield的语法糖。

    同时,执行generator 函数时,generator函数并没有立即执行,只是返回了一个可遍历的对象,当执行next()方法时才开始执行函数内的代码,直到 yield 或者return停止,并返回yield后面的值。

    async略微有点区别:

    调用 async 的函数时,函数里面的代码会立即执行,直到await处停止执行内部代码,同时跳出该方法,执行async 函数外面的后续代码,当await处的异步方法返回结果后,再回来执行,所以就有了上面的执行顺序。

     Note:如果await前没有return的话,then回调里面将返回undefined

  • 相关阅读:
    UIButton和UIImageView的区别
    大道至简第八章读后感
    简单登录界面
    大道至简第七章读后感
    计算成绩代码
    大道至简第六章读后感
    产生随机数代码
    大道至简第五章读后感
    计算成绩算法
    加密算法
  • 原文地址:https://www.cnblogs.com/rengised/p/6678637.html
Copyright © 2011-2022 走看看