关于async和await的有趣事情

今天突然发现一个有趣的事情。

  <script>    
    function foo(){
      return new Promise((res,rej)=>{
        setTimeout(()=>{
            res('hello')
        },1000)
    })
}

async function fun(){
    console.log( 111 )
   foo().then(res=>{
     console.log(res);
   })
    console.log( 'f' )
    console.log( 222 )
}
fun()
  </script>

打印的结果是
111
f
222
hello
这个打印顺序还是很好理解的

看下面这个就很有趣了

  <script>
   function foo(){
    return new Promise((res,rej)=>{
        setTimeout(()=>{
            res('hello')
        },1000)
    })
}

async function fun(){
    console.log( 111 )
  let f = await foo()
    console.log( f )
    console.log( 222 )
}
fun()
</script>

打印结果是
111
等待一秒打印hello
222

在这里我们需要注意await是一个同步任务

在这里可以发现我们在执行某一个代码时,如果必须依赖上一个代码里面的参数时,我们就可以使用await这个同步。

await的原理就是生成器。

  <script>
   function foo(){
    return new Promise((res,rej)=>{
        setTimeout(()=>{
            res('hello')
        },1000)
    })
}

async function fun(){
    console.log( 111 )
  let f = yeild foo()
    console.log( f )
    console.log( 222 )
}
fun()
</script>

第一个fun()执行后,可以看做第一次调用next()方法
也就是打印 111 和执行 foo()函数。foo函数执行完毕,打印了hello,再次调用next()方法。

如果对于再次调用next()方法不无法理解的话,
可以思考fun()函数的执行只要不报错就不会卡在某个地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值